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

编辑:

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

作品

有帮助吗?

解决方案

编辑: 看起来你找到了一种方法来获取ComboBoxItems。您可能还想查看ItemContainerStyle并查看是否有一些DataBinding可以利用(如果您的项目具有Enabled属性或类似的东西)。

但是,根据您使用DataBinding的方式,您可能会显示“已停用”状态。使用DataTemplates在不同的画笔,不透明度等中的项目。 Bea Stollnitz有一篇关于这里的好文章。

从UX的角度来看,您可能想要考虑的一件事是,为什么要将它们设为禁用而不是隐藏。是否存在某种渐进式披露策略,您可以利用其中没有一个ComboBox填充用户无法点击的内容?

其他提示

您可以在Combobox上设置ItemContainerStyle。从Blend - 创建当前副本以获取此模板。在模板中,您可以将IsEnabled属性设置为Setter,并将其值绑定到您要绑定的任何值。

<Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}">
            ...
            <Setter Property="IsEnabled" Value="{Binding Active}"/>
            ...
        </Style>

我不知道实际上禁用ComboBox中的项目的方法,但您应该能够为OnClick事件添加逻辑,该事件将检查所选项目的索引是否为&gt; = x并且禁止所请求的任何操作基于此。

Imho,最好的方法是使用DataTriggers

<ComboBox.ItemContainerStyle>
    <Style TargetType="ComboBoxItem">
        <Style.Triggers>
            <DataTrigger *insert condition*>
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
     </Style>
</ComboBox.ItemContainerStyle>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top