我面临着拥挤的组合框(5000件)的性能问题。下拉列表的渲染非常慢(就像在显示任何内容之前计算所有项目一样)。
你有什么技巧可以让这个下拉显示变得懒惰吗?
Xaml代码:
<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Horizontal" Width="200" Height="20">
<TextBlock>Test Combo </TextBlock>
<ComboBox x:Name="fooCombo" Margin="5,0,0,0"></ComboBox>
</StackPanel>
</Grid>
代码背后的代码:
public MainPage() { 的InitializeComponent();
List<string> li = new List<string>();
int Max = 5000;
for (int i = 0; i < Max; ++i)
li.Add("Item - " + i);
fooCombo.ItemsSource = li;
}
好吧,Combobox UI虚拟化中似乎有a bug,因此自动完成框应该是最佳选择。
答案 0 :(得分:6)
如果你想要一个实际的ComboBox(而不是AutoCompleteBox
),你可以用ItemsTemplate
替换VirtualizingStackPanel
。在您的示例中,这将是:
<ComboBox x:Name="fooCombo" Margin="5,0,0,0">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel></VirtualizingStackPanel>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
作为指南,我可能会检查您的使用情况,看看ComboBox
是否适合您 - 因为下拉列表中有5000个项目似乎很有用。
顺便说一下,Silverlight中的预期行为是缓慢的而不是错误。
答案 1 :(得分:2)
使用AutoCompleteBox
代替,在填充下拉列表之前调整需要输入的字符数,以限制任何时候需要的下拉项目数。