gpt4 book ai didi

wpf - 在具有超过 1000 个图像项的 WPF 列表框中,缩放图像变慢

转载 作者:行者123 更新时间:2023-12-04 00:59:40 25 4
gpt4 key购买 nike

我在开发照片查看器应用程序时遇到了问题。
我使用 ListBox 来显示图像,它包含在 ObservableCollection 中。
我将 ListBox 的 ItemsSource 绑定(bind)到 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 中的 Image'height 与 slider 绑定(bind)。( slider 的值也绑定(bind)到 zoombarmanager.ZoomBarWidth.Width)。
但是我发现如果集合变得更大,例如:包含超过 1000 张图像,如果我使用 slider 更改 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~~>

但是如果我使用上面的样式,我必须在 ListBox 之外使用 ScrollViewer,否则我不知道如何获得平滑滚动的滚动条,并且包装面板似乎没有默认滚动条。有人帮忙吗?据说带有滚动查看器的列表框性能很差。

最佳答案

问题是您的新布局面板是 WrapPanel,它不支持虚拟化!可以创建自己的虚拟化 WrapPanel... 阅读更多 here

另请阅读有关其他问题的更多信息,例如实现 IScrollInfo here

我还强烈建议您不要仅仅为了替换布局面板而创建新的控件模板...而是执行以下操作:

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

这样做的好处是您不需要将列表框包装在滚动查看器中!

[ 更新 ] 另请阅读 this乔什·史密斯的文章!要使 WrapPanel 换行...您还必须记住禁用水平滚动...
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />

关于wpf - 在具有超过 1000 个图像项的 WPF 列表框中,缩放图像变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/181845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com