我在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张图片小样本快)。
那么我怎样才能达到相同的速度或接近它呢?
答案 0 :(得分:1)
我遇到了同样的问题,并且猜测是因为你用作itemspanel的wrappanel没有虚拟化,而是使用VirtualizedStackPanel之类的虚拟化面板,或者开发你的VirtualizedWrapPanel并使用它,因为WPF标准库中没有VirtualizedWrapPanel < / p>
答案 1 :(得分:1)
它们是您在此声明的许多其他次优属性。
在大多数情况下,对您的性能影响最大的是您在此处声明的位图效果,直到最近所有位图效果都是通过软件呈现的。
此外,您将CanContentScroll设置为false,即 NOT 虚拟化包装面板具有的内容,如果您按照Arsen给出的示例,则为= true。
此外看起来你在这里做了一些扩展,如果你尝试的todo性能优化的应用程序developmnet是另一个坏主意。
这是一个糟糕的比较,浏览器显示3000个图像是完全不同的(显然他们没有从Windows资源管理器计算的位图效果)。
无论如何,他们的帖子中存在很多其他问题,但似乎你不再拥有一个帐户,这里的这几个虽然肯定会对整体产生重大影响。