【问题标题】:Silverlight combobox performance issueSilverlight 组合框性能问题
【发布时间】:2023-03-21 10:09:01
【问题描述】:

我在组合框(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>

后面的代码:

公共主页() { 初始化组件();

    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,所以应该采用自动完成框。

【问题讨论】:

    标签: silverlight performance


    【解决方案1】:

    如果您想要一个实际的 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 中的预期行为,而不是错误。

    【讨论】:

    【解决方案2】:

    请改用AutoCompleteBox,调整在填充下拉列表之前需要输入的字符数,以限制任何时候需要的下拉项目数。

    【讨论】:

    • @Vinzz:不确定是否有真正的解决方案(如果这只是一种解决方法),因为需要用 100 个项目填充组合框,更不用说 1000 个项目,这不是一个很好的 UI 设计首先决定。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多