Моя проблема
У меня проблема с разработкой сенсорного интерфейса для встроенного устройства.
При использовании стандартного 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