【问题标题】:How to Disable Combobox Items?如何禁用组合框项目?
【发布时间】:2009-06-16 18:53:30
【问题描述】:

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

编辑:

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

作品

【问题讨论】:

    标签: .net wpf combobox


    【解决方案1】:

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

    但是,根据您执行 DataBinding 的方式,您可以使用 DataTemplates 在不同的画笔、不透明度等中显示您的“禁用”项目。 Bea Stollnitz 有一篇关于 here 的好帖子。

    从用户体验的角度来看,您可能需要考虑的一件事是,为什么要禁用它们而不是隐藏它们。是否可以利用某种渐进式披露策略来避免 ComboBox 填充用户无法点击的内容?

    【讨论】:

    • 好吧,我也可以隐藏它们。问题在于我没有找到一种方法来遍历 ComboBoxItems 或通过索引访问它们。
    • 每天学习新东西。必须是一种利用 DataBinding 和容器生成在代码隐藏之外执行此操作的方法吗?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      恕我直言,最好的方法是使用 DataTriggers

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

      【讨论】:

        【解决方案4】:

        我不知道实际上禁用组合框中项目的方法,但您应该能够向 OnClick 事件添加逻辑,该事件将检查所选项目的索引是否 >= x 并禁止基于请求的任何操作关于那个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 2012-07-11
          • 1970-01-01
          • 1970-01-01
          • 2019-04-09
          • 1970-01-01
          相关资源
          最近更新 更多