有没有办法通过索引访问其项目的属性来禁用除WPF ComboBox的前x项以外的所有项目?
编辑:
ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));
作品
答案 0 :(得分:2)
编辑: 看起来你找到了一种方法来获取ComboBoxItems。您可能还想查看ItemContainerStyle并查看是否有一些DataBinding可以利用(如果您的项目具有Enabled属性或类似的东西)。
但是,根据您使用DataBinding的方式,您可以使用DataTemplates在不同的画笔,不透明度等中显示“禁用”项目。 Bea Stollnitz关于here的帖子很好。
从UX的角度来看,您可能想要考虑的一件事是,为什么要将它们设为禁用而不是隐藏。是否存在某种渐进式披露策略,您可以利用其中没有一个ComboBox填充用户无法点击的内容?
答案 1 :(得分:2)
您可以在Combobox上设置ItemContainerStyle。从Blend - 创建当前副本以获取此模板。在模板中,您可以将IsEnabled属性设置为Setter,并将其值绑定到您要绑定的任何值。
<Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}">
...
<Setter Property="IsEnabled" Value="{Binding Active}"/>
...
</Style>
答案 2 :(得分:0)
我不知道实际上禁用ComboBox中的项目的方法,但您应该能够为OnClick事件添加逻辑,该事件将检查所选项目的索引是否为&gt; = x并且禁止所请求的任何操作基于此。
答案 3 :(得分:0)
Imho,最好的方法是使用DataTriggers
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger *insert condition*>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>