在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项目 – 使用键盘访问时也是如此