在wpf中禁止/阻止选择禁用的combobox项目

我正在编写一个应用程序,其中我想在ComboBox禁用几个项目,并且还想禁止/阻止选择禁用的项目。 请注意,主窗口中的ComboBox有另一个ComboBox作为ComboBox项目初始化(由运行时由数据模板选择器决定)。

使用下面的代码我可以在ComboBox中禁用ComboBox,但它不会阻止用户选择禁用的ComboBox项。 禁止/阻止选择禁用物品的任何帮助都会有所帮助。

以下是代码段

主窗口中的ComboBox:

    

数据模板选择器:

 public class QualityComboBoxTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { var element = container as FrameworkElement; var dataTemplate = element.FindResource(((item is string) && item.Equals("Ferrari")) ? "DataTemplateTopLevelCombobox2" : "DataTemplateTopLevelCombobox1") as DataTemplate; return dataTemplate; } } 

以上ComboBox的数据模板:

           

您可以通过将ComboBoxItem IsEnabled属性设置为false来实现此目的;

因此,ComboBox的ItemSource每个项目(即您的案例中的Cars )可以是具有某些属性(例如IsSelectable )的对象,指定是应该启用还是禁用它,然后将其与样式一起使用以使项目不可选。 像这样的东西 –

  

更新:

        

解决@JordyBoom指出的问题。

ItemsContainerGenerator在下拉列表至少打开一次之前不会生成项目。

因此,如果您打开下拉菜单并在窗口加载的事件处理程序中再次关闭它,那么所有应该可以正常使用鼠标和键盘选择。

  public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(onLoaded); } private void onLoaded(object sender, RoutedEventArgs e) { cmbx.IsDropDownOpen = true; cmbx.IsDropDownOpen = false; } 

source: WPF:禁用combobox项目 – 使用键盘访问时也是如此