LIST BOX 真心有点蛋疼。。。 滚来滚去 你就是不知掉 他滚在那里 。。。 对于 在移动 设备上经常需要使用 列表 并且 滚动加载 这可蛋疼 。
编辑过 Listbox 的template 人肯定知道 ListBox 里面的主体是个ScrollView构成的 ,我们来看看 这个 ScrollView 。。。
唔。。。 里面 额 。。 有两个东西
VerticalOffset
HorizontalOffset
这两个分别可以获取 垂直和水平方向上的滚动位置 。。。
(其实 ScrollView 里面是有两个 ScrollBar ScrollBar有Value Change 事件 ,可以挖出 ScrollBar 找到 事件 并订阅的,, 。。。。)
现在我们第一定出我们的策略 就是 挖出 ScrollView 然后 监听 VerticalOffset 当 VeritcalOffset 到最大值的时候 就可以发出一个滚动到底部的通知?! 事件?! 无所谓了。。。
好吧 直接上代码
代码如下 | 复制代码 |
public class ScrollBehavior public static ICommand GetAtEndCommand(DependencyObject obj) public static void SetAtEndCommand(DependencyObject obj, ICommand value) public static DependencyProperty AtTopCommandProperty public static ICommand GetAtTopCommand(DependencyObject obj) public static void SetAtTopCommand(DependencyObject obj, ICommand value) public static DependencyProperty AtScrollCommandProperty public static ICommand GetAtScrollCommand(DependencyObject obj) public static void SetAtScrollCommand(DependencyObject obj, ICommand value)
public static void OnCommandChanged( static void element_Loaded(object sender, RoutedEventArgs e) var listener = new Listener();
CommandArg endCommandArg = new CommandArg(); var endCommand = GetAtEndCommand((FrameworkElement)sender); if (endCommand != null && endCommand.CanExecute(endCommandArg)) //System.Diagnostics.Debug.WriteLine(scrollViewer.VerticalOffset.ToString()); var topCommand = GetAtTopCommand((FrameworkElement)sender); //System.Diagnostics.Debug.WriteLine("Scroll Top"); CommandArg scrollCommandArg = new CommandArg(); var scrollCommand = GetAtScrollCommand((FrameworkElement)sender); }; Binding binding = new Binding("VerticalOffset"); }
while (queue.Count > 0) public class Listener public Listener() public event EventHandler void HandleValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) OnChanged(new ValueChangedEventArgs(e)); protected void OnChanged(ValueChangedEventArgs e) if (Changed != null) public void Attach(ScrollViewer element, Binding binding) target = element; } public void Detach() } public class ValueChangedEventArgs : EventArgs public DependencyPropertyChangedEventArgs EventArgs { get; private set; } |
我先做了三个ICommand 类型的动态 属性 分别是 滚动到顶部 底部 和滚动中 所调用的Command
然后在动态属性绑定时 订阅控件 Loaded事件 ,这样 空间一旦Loaded 就我们就去翻出ScrollView 然后的 Listener 去监听 他的 VerticalOffset
监听器 其实就是做了个动态属性的Listener ,我们只需要把 ScrollView.VerticalOffset 绑定到 这个 Listener 的动态属性上 ,这样当值一旦变化 就会调用 方法HandleValueChanged
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级