【发布时间】:2009-06-16 18:53:30
【问题描述】:
有没有办法通过索引访问 WPF ComboBox 的项目的属性来禁用 WPF 组合框的前 x 个项目以外的所有项目?
编辑:
ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));
作品
【问题讨论】:
有没有办法通过索引访问 WPF ComboBox 的项目的属性来禁用 WPF 组合框的前 x 个项目以外的所有项目?
编辑:
ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));
作品
【问题讨论】:
编辑: 看起来您找到了获取 ComboBoxItems 的方法。您可能还想查看 ItemContainerStyle 并查看是否有一些您可以利用的 DataBinding(如果您的项目具有 Enabled 属性或类似的东西)。
但是,根据您执行 DataBinding 的方式,您可以使用 DataTemplates 在不同的画笔、不透明度等中显示您的“禁用”项目。 Bea Stollnitz 有一篇关于 here 的好帖子。
从用户体验的角度来看,您可能需要考虑的一件事是,为什么要禁用它们而不是隐藏它们。是否可以利用某种渐进式披露策略来避免 ComboBox 填充用户无法点击的内容?
【讨论】:
您可以在 Combobox 上设置 ItemContainerStyle。 From Blend - 创建当前的副本以获取此模板。在模板中,您可以将 IsEnabled 属性设置为 Setter,并将其值绑定到您要绑定的任何内容。
<Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}">
...
<Setter Property="IsEnabled" Value="{Binding Active}"/>
...
</Style>
【讨论】:
恕我直言,最好的方法是使用 DataTriggers
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger *insert condition*>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
【讨论】:
我不知道实际上禁用组合框中项目的方法,但您应该能够向 OnClick 事件添加逻辑,该事件将检查所选项目的索引是否 >= x 并禁止基于请求的任何操作关于那个。
【讨论】: