gpt4 book ai didi

c# - 确定 LongListSelector 何时滚动

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:51 26 4
gpt4 key购买 nike

我只想在向下滚动时最小化应用程序栏,然后在向上滚动时显示其正常大小。我在 facebook 应用程序上看到过这种功能,它看起来非常吸引人且用户友好。我有我的 LongListSelector,它绑定(bind)了项目,并且一个应用程序栏已经在代码后面。启用此类功能缺少的 key 是什么?

最佳答案

您只需要弄清楚用户何时滚动以及朝哪个方向滚动。这是一篇带有示例代码的好文章。 Detecting WP8 LongListSelector’s end of scroll .您可以对其进行修改,使其完全符合您的要求。

但是,如果我要这样做,我会选择更直接的路线。我将派生自己的 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 属性绑定(bind)到一个转换器,以实现您的 AppBar 可见性,您将实现您的目标。


如果无法绑定(bind),则必须进行回调以更新可见性。但是,如果您想要更简单的东西,只需将它连接到自定义 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;
}
}
}

关于c# - 确定 LongListSelector 何时滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25902968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com