确定LongListSelector何时滚动
本文关键字:滚动 何时 LongListSelector 确定 | 更新日期: 2023-09-27 18:22:32
我只想在向下滚动时最小化应用程序栏,然后在向上滚动时显示其正常大小。我在脸书应用程序上看到了这种功能,它看起来非常吸引人,用户友好。我有我的LongListSelector和绑定到它的项,还有一个已经在代码后面的appbar。启用这样一个功能所缺少的关键是什么?
您只需要弄清楚用户何时滚动以及滚动方向。这是一篇很棒的文章,其中包含示例代码。正在检测WP8 LongListSelector的滚动结束。您可以修改它,使其完全符合您的要求。
然而,如果我要去做,我会选择更直接的路线。我会派生出自己的LLS,并在滚动条的值上附加一个属性。大概是这样的:)
public class MyLLS : LongListSelector, INotifyPropertyChanged
{
// implement the INotify
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
// dat grab doe
sb = this.GetTemplateChild("VerticalScrollBar") as System.Windows.Controls.Primitives.ScrollBar;
sb.ValueChanged += sb_ValueChanged;
}
void sb_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
// an animation has happen and they have moved a significance distance
// set the new value
ScrollValue = e.NewValue;
// determine scroll direction
if(e.NewValue > e.OldValue)
{
scroll_direction_down = true;
}
else
{
scroll_direction_down = false;
}
}
public System.Windows.Controls.Primitives.ScrollBar sb;
private bool scroll_direction_down = false; // or whatever default you want
public bool ScrollDirectionDown
{ get { return scroll_direction_down; } }
public double ScrollValue
{
get
{
if (sb != null)
{
return sb.Value;
}
else
return 0;
}
set
{
sb.Value = value;
NotifyPropertyChanged("ScrollValue");
}
}
}
现在您知道了确切的滚动位置。你甚至可以通过获得最高和最低值
double min = this.sb.Minimum;
double max = this.sb.Maximum;
现在,将ScrollDirectionDown
属性绑定到AppBar可见性的转换器,您就可以实现目标了。
如果不能绑定,则必须进行回调以更新可见性。但是,如果您想要更简单的东西,只需将其连接到自定义LLS的ManipulationStateChanged
事件即可。
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
private void lls_ManipulationStateChanged(object sender, EventArgs e)
{
if (lls.ScrollDirectionDown)
{
ApplicationBar.IsVisible = false;
}
else
{
ApplicationBar.IsVisible = true;
}
}
}
因此,您必须检测longlistselector
何时开始滚动。为了实现这一点,这里有一个类似的线程:
Windows Phone 8长列表选择器-数据加载异步后滚动到底部
在DoAndScroll
方法中,您可以简单地包含代码以最小化AppBar
。
在appbar的xaml代码中,将模式更改为Minimized。
<shell:ApplicationBar Mode="Minimized" Opacity="1.0" IsMenuEnabled="True" IsVisible="True"></>
此后,每当它向上滚动时,使AppBar
到Default
的Mode
。
或者看看这个来检测longlistselector
的底部。
检测WP8 LongListSelector的滚动结束