其中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>

其中wpf控制为海量图像量

如果尝试一次将所有图像加载到内存中,性能将会很糟糕。因此,您可以使用虚拟化只加载那些将是可见的(或刚刚离开屏幕),并加载其他的,如果/当用户滚动使它们可见。

这个答案包含一些示例代码。简而言之,您需要将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性能的内容