2009-06-16 65 views
1

有没有办法通过索引访问其项目的属性来禁用除WPF组合框的前x项目之外的所有项目?如何禁用组合框项目?

编辑:

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

工作

回答

2

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

但是,根据您如何进行DataBinding,您可以使用DataTemplates在不同的Brush,Opacity等中显示“已禁用”项目。 Bea Stollnitz有一篇关于here的好帖子。

从UX的角度来看,您可能需要考虑的一件事就是为什么要让它们禁用而不是隐藏。有没有某种渐进式的披露策略,你可以利用没有一个ComboBox充满了用户无法点击的东西?

+0

好,我可以隐藏他们。问题是,我没有找到一种方法来遍历ComboBoxItems或通过索引访问它们。 – 2009-06-16 19:15:40

0

我不知道实际的方式在组合框禁用的项目,但你应该能够逻辑添加到您的OnClick事件,这将检查所选项目的索引是> = x,并且不允许根据请求执行任何操作。

2

您可以在Combobox上设置ItemContainerStyle。从混合 - 创建一个当前的副本来获得这个模板。在模板中,您可以将IsEnabled属性设置为Setter,并将其值绑定到任何要绑定的值。

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

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

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