Я столкнулся с проблемой при разработке приложения для просмотра фотографий.
Я использую ListBox для показа изображений, которые содержатся в ObservableCollection.
Я связываю ItemsSource ListBox с коллекцией ObservableCollection.
<DataTemplate DataType="{x:Type modeldata:ImageInfo}">
<Image
Margin="6"
Source="{Binding Thumbnail}"
Width="{Binding ZoomBarWidth.Width, Source={StaticResource zoombarmanager}}"
Height="{Binding ZoomBarWidth.Width, Source={StaticResource zoombarmanager}}"/>
</DataTemplate>
<Grid DataContext="{StaticResource imageinfolder}">
<ScrollViewer
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<ListBox Name="PhotosListBox"
IsSynchronizedWithCurrentItem="True"
Style="{StaticResource PhotoListBoxStyle}"
Margin="5"
SelectionMode="Extended"
ItemsSource="{Binding}"
/>
</ScrollViewer>
Я также связываю высоту изображения в ListBox с помощью ползунка (значение ползунка также привязывается к zoombarmanager.ZoomBarWidth.Width).
Но я обнаружил, что если коллекция станет больше, например: содержит более 1000 изображений, если я использую ползунок для изменения размера iamges, он станет немного медленнее.
Мой вопрос
1. Почему стало медленно? он пытается увеличить каждое изображение или просто потому, что notify ("Width") вызывается более 1000 раз.
2. Есть ли способ решить эту проблему и сделать это быстрее.
PhotoListBoxStyle выглядит так:
<Style~~ TargetType="{x:Type ListBox}" x:Key="PhotoListBoxStyle">
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}" >
<WrapPanel
Margin="5"
IsItemsHost="True"
Orientation="Horizontal"
VerticalAlignment="Top"
HorizontalAlignment="Stretch" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style~~>
Но если я использую стиль выше, я должен использовать ScrollViewer вне ListBox, в противном случае я понятия не имею, как получить плавную полосу прокрутки прокрутки, и кажется, что у обертки нет прокрутки по умолчанию. Кто-нибудь поможет? Говорят, что список с scrollviewer имеет низкую производительность.