哪个wpf控制大量图像量

时间:2015-09-27 10:47:55

标签: c# wpf xaml gridview wpf-controls

我有30000张图片,现在我需要一个控件,可以显示图像(不仅仅是文件路径的图片)及其文件名。

需要某种分页,例如30页图片,我想到了GridView?!

我有一个包含Hashtable的列表(键:该图片的转义路径,值:图片名称),我有一个绑定到该哈希表的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>

1 个答案:

答案 0 :(得分:0)

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

This answer包含一些示例代码。简而言之,您需要将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>

您可以阅读有关optimising performance on MSDN here的更多信息。