其中wpf控制为海量图像量
本文关键字:图像 wpf 控制 其中 | 更新日期: 2023-09-27 18:14:54
我有30000张图片,现在我需要一个控件,可以显示我的图像(作为图片而不仅仅是文件路径)与它的文件名。
需要一些分页,例如一个页面30张图片,我想到了GridView ?!
我有一个列表,其中包含一个哈希表(键:转义路径到该图片,值:图片名称),我有一个GridView绑定到该哈希表,但它只显示文件路径。
c#:wordListView.ItemsSource = Hsh;// contains a property of Hahstable;
XAML: <DataGrid x:Name="wordListView" HorizontalAlignment="Left" VerticalAlignment="Top" Height="260" Width="645" Margin="10,156,0,0">
<!--AutoGenerateColumns="False" ItemsSource="{Binding}">-->
<!--<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path}" Header="Path"/>
<DataGridTextColumn Binding="{Binding TimeStamp}" Header="TimeStamp"/>
</DataGrid.Columns>-->
</DataGrid>
如果尝试一次将所有图像加载到内存中,性能将会很糟糕。因此,您可以使用虚拟化只加载那些将是可见的(或刚刚离开屏幕),并加载其他的,如果/当用户滚动使它们可见。
这个答案包含一些示例代码。简而言之,您需要将ItemsPanel
设置为VirtualizingStackPanel
:
<ItemsControl
VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding ImageSource}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
你可以在这里阅读更多关于优化MSDN性能的内容