WPF的ListBox加载大量图片卡死的问题
问题如下:ListBox的Itemplate是我自己定义的usercontrol,每个usercontrol都有一个image,当加载listbox的时候(大概有200个左右usercontrol)会很慢,而且加载完成之后移动鼠标或者滚轮都会造成卡死!!
ListBox代码定义如下:
<ListBox Grid.Column="1" Grid.Row="1" Name="_MonitorDisplayArea"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="False">
<ListBox.CacheMode>
<BitmapCache EnableClearType="False"
RenderAtScale="1"
SnapsToDevicePixels="False"/>
</ListBox.CacheMode>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<local:MonitorState />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<UserControl x:Class="TaianSUCCEED.MineMonitoringSystem.WPF.UserInterface.MonitorState"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TaianSUCCEED.MineMonitoringSystem.WPF.UserInterface"
mc:Ignorable="d"
Height="150" Width="200" MouseEnter="UserControl_MouseEnter" MouseLeave="UserControl_MouseLeave" Loaded="UserControl_Loaded">
<UserControl.Resources>
<local:SourceConverter x:Key="sourceConverter"/>
</UserControl.Resources>
<Border BorderThickness="1" CornerRadius="10" BorderBrush="Black">
<Grid Name="_MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Content="设备编号:" Grid.Column="1" />
<Label Content="{Binding 设备编号, IsAsync=True}" Grid.Column="2"/>
<Label Content="通道数目:" Grid.Column="1" Grid.Row="1"/>
<Label Content="{Binding 通道数目, IsAsync=True}" Grid.Column="2" Grid.Row="1"/>
<Label Content="{Binding 安装位置}" HorizontalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="3"/>
<Border Grid.RowSpan="2" BorderThickness="0,0,1,1" CornerRadius="3" BorderBrush="Black">
<Image Source="{Binding imagePath, Converter={StaticResource sourceConverter}, IsAsync=True}" RenderOptions.BitmapScalingMode="LowQuality" Name="_monitorImage"/>
</Border>
<Grid Grid.Row="3" Grid.ColumnSpan="3" Name="_MonitorStateGrid">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Content="连接位置:"/>
<Label Content="状态:" Grid.Column="0" Grid.Row="1"/>
</Grid>
</Grid>
</Border>
</UserControl>
肯定是不会卡的 所以 此虚拟化非彼虚拟化 具体还是那句 百度之 原来存的网页换机器 没了
你自己找下吧 网上应该有蛮多人研究过的
在不行就论坛上继续发帖求助 帮顶下先 呵呵
[其他解释]