Vin*_*nzz 4 silverlight performance
我面临一个拥挤的组合框(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>
Run Code Online (Sandbox Code Playgroud)
代码背后:
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;
}
Run Code Online (Sandbox Code Playgroud)
好吧,Combobox UI虚拟化中似乎存在一个错误,因此自动完成框应该是可行的方法.
小智 7
如果你想要一个实际的ComboBox(而不是一个AutoCompleteBox),你可以ItemsTemplate用a 替换VirtualizingStackPanel.在您的示例中,这将看起来像:
<ComboBox x:Name="fooCombo" Margin="5,0,0,0">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel></VirtualizingStackPanel>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
作为指南,我可能会检查你的使用场景,看看a是否ComboBox是你的正确控制 - 因为下拉列表中有5000个项目似乎是一个强大的用途.
顺便说一句,慢速是Silverlight中的预期行为,而不是bug.