代码之家  ›  专栏  ›  技术社区  ›  Brian Johnson

如何禁用组合框项?

  •  1
  • Brian Johnson  · 技术社区  · 16 年前

    是否有一种方法可以通过索引访问wpf组合框的项属性来禁用wpf组合框的前x项以外的所有项?

    编辑:

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

    作品

    4 回复  |  直到 12 年前
        1
  •  2
  •   micahtan    16 年前

    编辑: 看来你找到了一种方法来处理ComboBox。您可能还需要查看itemcontainerStyle,看看是否有一些可以利用的数据绑定(如果您的项具有已启用的属性或类似的属性)。

    但是,根据数据绑定的方式,可以使用数据模板以不同的画笔、不透明度等方式显示“禁用”的项。Bea Stollnitz对此有一个很好的帖子 here .

    从用户体验的角度来看,您可能需要考虑的一件事是,为什么您希望禁用它们,而不是隐藏它们。有没有一些渐进式的披露策略,你可以利用没有一个组合框填充用户不能点击的东西?

        2
  •  2
  •   Gunnar F    14 年前

    可以在组合框上设置itemcontainerStyle。从Blend-创建当前模板的副本以获取此模板。在模板中,可以将IsEnabled属性设置为setter,并将其值绑定到要绑定到的任何对象。

    <Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}">
                ...
                <Setter Property="IsEnabled" Value="{Binding Active}"/>
                ...
            </Style>
    
        3
  •  0
  •   AllenG    16 年前

    我不知道如何实际禁用组合框中的项目,但您应该能够向onclick事件添加逻辑,该事件将检查所选项目的索引是否为>=x,并根据该事件拒绝任何请求的操作。

        4
  •  0
  •   Nikita B    12 年前

    imho,最好的方法是使用数据触发器

    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Style.Triggers>
                <DataTrigger *insert condition*>
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
         </Style>
    </ComboBox.ItemContainerStyle>