Я столкнулся с проблемой при разработке приложения для просмотра фотографий. Я использую ListBox для отображения изображений, который содержится в ObservableCollection. Я связываю ListBox ItemsSource с 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>
Я также привязываю Image'height в ListBox со слайдером (значение ползунка также привязывается к zoombarmanager.ZoomBarWidth.Width). Но я обнаружил, что коллекция станет больше, например: содержит более 1000 изображений. Если я использую ползунок для изменения размера iamges, он становится немного медленным. Мой вопрос есть. 1. Почему он становится медленным? стараясь, чтобы он увеличивал все изображения, или просто потому, что уведомление ( "Ширина" ) вызывается более 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, иначе я понятия не имею, как получить плавный прокручивающийся скроллер, а в оболочке нет никакого скроллера по умолчанию. Кто-нибудь поможет? Говорят, что listbox с scrollviewer имеет низкую производительность.