【发布时间】:2010-11-15 03:51:33
【问题描述】:
我遇到了 WPF 中的图像显示器问题。我有一个显示 ImageSources 的 ListView。
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="1">
<ScrollViewer Padding="{TemplateBinding Padding}" Focusable="false">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ImagesListerViewItemsTemplate" DataType="{x:Type ImageSource}" >
<Border Height="150" Width="150" CornerRadius="0,0,0,0" BorderThickness="1,1,1,1" Margin="4,4,4,4" BorderBrush="#FF000000">
<Border Margin="8,8,8,8" Background="#FFFFFFFF">
<Border.BitmapEffect>
<OuterGlowBitmapEffect GlowColor="#FFFFFFFF"/>
</Border.BitmapEffect>
<Image Source="{Binding}" />
</Border>
</Border>
</DataTemplate>
并加载图片:
private static BitmapImage LoadDisplayableImage(System.IO.FileInfo file)
{
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 100;
bi.DecodePixelHeight = 100;
bi.UriSource = new Uri(file.FullName);
bi.EndInit();
return bi;
}
但是当我想要滚动 ListView 或尝试调整只有 49 个图像的表单时,我的程序非常慢。相比之下,Windows 的资源管理器最多可以在我的计算机中加载 3000 张图像并将它们全部显示,当我滚动它时仍然非常快(比我的 49 张图片小示例快)。
那么我怎样才能达到相同的速度或接近它呢?
【问题讨论】:
标签: c# .net wpf performance image