【问题标题】:ListBox Like Touch Scrolling for ItemsControlListBox 类似于 ItemsControl 的触摸滚动
【发布时间】:2015-07-29 21:08:39
【问题描述】:

WPF ListBox 内置了一些非常棒的触摸滚动功能,我想在一个简单的 ItemsControl 上使用它。

我非常喜欢使用现有的功能来实现这一点,因为我之前的努力(使用 TouchDown/Move/Up 事件)没有 ListBox 的行为那么流畅,并且感觉不同以至于可以识别在同时使用这两个控件的应用程序中。

我尝试在reference source 中找到负责 ListBox 触摸行为的代码,但 ListBox 类甚至不包含“Touch”一词。

有没有办法在 ItemsControl 上启用触摸滚动,或者,如果没有,负责 ListBox 的魔术代码在哪里隐藏以便我可以移植它?

【问题讨论】:

    标签: c# wpf touch


    【解决方案1】:

    ItemsControl 放入ScrollViewer 并确保触摸事件从ItemsControl 中的任何控件冒泡到ScrollViewer

    <ScrollViewer>
        <ItemsControl>
        </ItemsControl>
    </ScrollViewer>
    

    【讨论】:

    • 我在 ItemsControl 的模板中添加了一个 ScrollViewer。但没有运气。我会用 Snoop 检查 Touch 事件的去向...
    • Snoop 告诉我,视觉树中没有任何东西可以处理这些触摸事件。当我将 ScrollViewer 放在外面时,除了我的虚拟化不再工作之外没有任何变化。
    【解决方案2】:

    所使用的 ScrollViewer 的 PanningMode 属性(在 ControlTemplate 内部或 ItemsControl 外部)需要设置为“无”以外的其他值。

    负责触摸滚动的代码可以在System.Windows.Input.InertiaTranslationBehavior类中找到。

    【讨论】:

      【解决方案3】:

      正如他们所说,您需要将您的 ItemsControl 放入 ScrollViewer,但如果您想让它做您想做的事情,您必须设置 itemsControl 的高度。 看看这个帖子:Making a StackPanel scrollable in Windows Phone 8

      【讨论】:

      • 感谢您的输入,但我的问题是“触摸滚动”的“触摸”部分。 “滚动”部分工作正常。 =)
      • 我认为这是 WPF 问题,而不是 WP8?
      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多