ListBox触摸滚动性能

时间:2011-08-11 09:44:24

标签: c# wpf .net-4.0 listbox

我的问题

我在为嵌入式设备开发触控友好UI时遇到问题。 使用WPF 4.0中的标准ListBox,它支持触摸事件和触摸滚动开箱即用,触摸滚动性能比通过用鼠标拉动滚动条滚动更糟糕。 最值得注意的是,当开始滚动轻弹时,滚动停顿的时间只有几分之一秒,但足以感觉不好并使轻弹几乎无法使用(当口吃停止时手势完成,导致没有或最小响应)。 作为参考,我在Windows资源管理器中使用了触摸滚动功能,它没有问题并且反应平稳。

为什么ListBox的触摸滚动比使用鼠标滚动要差得多,并且在浏览器中触摸滚动?

我的测试代码

<ListBox x:Name="listBox"
         ScrollViewer.CanContentScroll="False">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type Brush}">
            <StackPanel Orientation="Horizontal">
                <Rectangle Width="100"
                            Height="100"
                            Fill="{Binding}" />
                <TextBlock Text="{Binding Color}" FontSize="36" Margin="20"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>            
</ListBox>

ItemsSource设置为IEnumerable<Brush>,包含System.Windows.Media.Brushes中的所有141个画笔。

我尝试了什么

我玩过一些配置选项但没有用。我试过了

  • VirtualizingStackPanel.IsVirtualizing真假
  • 将画笔数量减少到20
  • 将ItemsPanel明确设置为VirtualizingStackPanel
  • ScrollViewer.CanContentScroll="True"(当时很难说,但我认为这个问题仍然存在)

由于鼠标滚动很好,我真的不希望这些可以帮助任何人,但是......好吧......我试过了。 =)

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用VirtualizingStackPanel.VirtualizationMode="Recycling"

答案 1 :(得分:0)

作为一种解决方法,我使用TouchX事件重新实现了触摸滚动。这样可以顺利运行它所运行的系统。

答案 2 :(得分:0)

在Microsoft.Surface SDK中,SurfaceListBox是一个非常好的控件,支持所有触摸事件Microsoft surface