Wpf 提高将图像加载到ComboBox的性能
我使用WPF ComboBox填充国家列表,如下所示: 在ComboBox内部,我有一个VirtualzingStackPanel,其中包含一个图像和一个文本块:Wpf 提高将图像加载到ComboBox的性能,wpf,image,data-binding,combobox,virtualization,Wpf,Image,Data Binding,Combobox,Virtualization,我使用WPF ComboBox填充国家列表,如下所示: 在ComboBox内部,我有一个VirtualzingStackPanel,其中包含一个图像和一个文本块: <ComboBox.ItemTemplate> <DataTemplate> <VirtualizingStackPanel Orientation="Horizontal"> &
<ComboBox.ItemTemplate>
<DataTemplate>
<VirtualizingStackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0" Source="{Binding code, Converter={StaticResource ImageComboBoxConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="5" Text="{Binding country_Text}"/>
</VirtualizingStackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
我使用一个简单的数据绑定转换器来检索我的标志文件
问题是,填充列表大约需要3-4秒。我可以应用某种缓冲或缓存技术来更快地加载图像吗?您需要虚拟化ComboBox.ItemsPanel,而不是.ItemTemplate。ItemsPanel是用于显示所有控件的面板,而ItemTemplate用于显示每个控件 虚拟化StackPanel不会渲染不可见的项目。取而代之的是,它只渲染可见的项目加上一些额外的滚动缓冲区,并在滚动时替换每个项目后面的数据。因此,使用它来显示每个单独的项目是无用的,您需要将其用作显示所有项目的面板 您的代码可能如下所示:
<ComboBox ItemsSource="{Binding Countries}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0" Source="{Binding code, Converter={StaticResource ImageComboBoxConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="5" Text="{Binding country_Text}"/>
</StackPanel >
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
您可能还需要将一个或所有这些属性添加到标记中
您需要虚拟化ComboBox.ItemsPanel,而不是.ItemTemplate。ItemsPanel是用于显示所有控件的面板,而ItemTemplate用于显示每个控件 虚拟化StackPanel不会渲染不可见的项目。取而代之的是,它只渲染可见的项目加上一些额外的滚动缓冲区,并在滚动时替换每个项目后面的数据。因此,使用它来显示每个单独的项目是无用的,您需要将其用作显示所有项目的面板 您的代码可能如下所示:
<ComboBox ItemsSource="{Binding Countries}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="30" Height="30" Margin="0" Source="{Binding code, Converter={StaticResource ImageComboBoxConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="5" Text="{Binding country_Text}"/>
</StackPanel >
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
您可能还需要将一个或所有这些属性添加到标记中
回收模式产生了巨大的影响。非常感谢。同意我的观点!谢谢回收模式产生了巨大的影响。非常感谢。同意我的观点!谢谢