【问题标题】:Customizing a combobox in WPF && winforms application在 WPF && winforms 应用程序中自定义组合框
【发布时间】:2015-04-21 00:42:59
【问题描述】:

在我的 wpf 应用程序中,我遇到了这个问题。此组合框的项目源包含 20000 个元素

 <ComboBox   Height="30" ItemsSource="{Binding MyTheme}" DisplayMemberPath="theme_libelle" />

问题是当我选择它时,即使项目源是一个简单的字符串列表,也需要很长时间才能打开。

我尝试使用其面板的虚拟化,但得到了相同的结果。当我用WinForms ComboBox 替换它时,我得到了一个完美的结果:打开需要一秒钟。

<WindowsFormsHost >
<WinForms:ComboBox DataSource="MyTheme" SelectedIndex="0"></WinForms:ComboBox>
    </WindowsFormsHost>

我需要知道如何实现一个自定义的组合框,该组合框继承自 winforms combobox,并将在绑定中使用的所需依赖属性和方法实现为 WPF ComboBox

有什么建议吗?

【问题讨论】:

    标签: c# .net wpf winforms combobox


    【解决方案1】:

    当我复制您的条件并将 20000 个项目添加到组合框时,打开组合框大约需要 27 秒。

    如下图使用VirtualizingStackPanel时,组合框不到1秒就打开了。

    <ComboBox ItemsSource="{Binding LotsOfItems}"
              MinWidth="100">
       <ComboBox.ItemsPanel>
          <ItemsPanelTemplate>
             <VirtualizingStackPanel />
          </ItemsPanelTemplate>
       </ComboBox.ItemsPanel>
    </ComboBox>
    

    this answer 中所述,如果虚拟化面板无法正常工作,则很可能是您运行的环境存在问题。

    【讨论】:

    • 谢谢,我找到了为什么它对我不起作用,我使用了这个 ressourcedictionnary pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" 这使得虚拟化未被使用,我删除它并且它起作用了!!!
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多