Производительность сенсорной прокрутки ListBox - PullRequest
6 голосов
/ 11 августа 2011

Моя проблема

У меня проблема с разработкой сенсорного интерфейса для встроенного устройства. При использовании стандартного ListBox из WPF 4.0, который поддерживает сенсорные события и сенсорную прокрутку из коробки, производительность сенсорной прокрутки намного хуже, чем прокрутка при перетягивании полосы прокрутки мышью. В частности, при запуске пролистывания прокрутка заикается в течение доли секунды, но этого достаточно, чтобы чувствовать себя плохо и делать щелчки почти непригодными (жест завершается, когда заикание прекращается, в результате чего ответ отсутствует или минимальный). Для справки я использовал сенсорную прокрутку в Windows Explorer, которая не вызывает проблем и реагирует плавно.

Почему сенсорная прокрутка для 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>

Для ItemSource установлено значение IEnumerable<Brush>, содержащее все 141 кисть в System.Windows.Media.Brushes.

Что я пробовал

Я поиграл с некоторыми опциями конфигурации безрезультатно. Я пытался

  • VirtualizingStackPanel.IsVirtualizing и истина и ложь
  • Сокращение количества кистей до 20
  • Явно настраивает ItemsPanel на VirtualizingStackPanel
  • ScrollViewer.CanContentScroll="True" (тогда трудно разобраться, но я думаю, что проблема сохраняется)

Поскольку прокрутка мышью в порядке, я не ожидал, что это поможет, но ... хорошо ... Я пытался. =) * * 1 029

Ответы [ 3 ]

0 голосов
/ 11 октября 2011

В качестве обходного пути я переопределил сенсорную прокрутку, используя события TouchX.Это работает так же гладко, как и следовало ожидать от системы, в которой она работает.

0 голосов
/ 03 мая 2012

в Microsoft.Surface SDK, SurfaceListBox - очень приятный элемент управления, поддерживающий все сенсорные события поверхность Microsoft

0 голосов
/ 15 августа 2011

Вы пробовали использовать VirtualizingStackPanel.VirtualizationMode="Recycling"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...