Silverlight组合框性能问题

时间:2010-06-08 14:08:38

标签: 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>
代码背后的代码:

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,因此自动完成框应该是最佳选择。

2 个答案:

答案 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代替,在填充下拉列表之前调整需要输入的字符数,以限制任何时候需要的下拉项目数。