如何禁用Combobox项目?

时间:2009-06-16 18:53:30

标签: .net wpf combobox

有没有办法通过索引访问其项目的属性来禁用除WPF ComboBox的前x项以外的所有项目?

编辑:

 ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));

作品

4 个答案:

答案 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>