有没有办法通过索引访问其项目的属性来禁用除WPF组合框的前x项目之外的所有项目?如何禁用组合框项目?
编辑:
ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));
工作
有没有办法通过索引访问其项目的属性来禁用除WPF组合框的前x项目之外的所有项目?如何禁用组合框项目?
编辑:
ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i));
工作
编辑: 看起来你找到了一种方法来获取ComboBoxItems。您可能还想查看ItemContainerStyle并查看是否有一些DataBinding可以利用(如果您的项目具有Enabled属性或类似的东西)。
但是,根据您如何进行DataBinding,您可以使用DataTemplates在不同的Brush,Opacity等中显示“已禁用”项目。 Bea Stollnitz有一篇关于here的好帖子。
从UX的角度来看,您可能需要考虑的一件事就是为什么要让它们禁用而不是隐藏。有没有某种渐进式的披露策略,你可以利用没有一个ComboBox充满了用户无法点击的东西?
我不知道实际的方式在组合框禁用的项目,但你应该能够逻辑添加到您的OnClick事件,这将检查所选项目的索引是> = x,并且不允许根据请求执行任何操作。
您可以在Combobox上设置ItemContainerStyle。从混合 - 创建一个当前的副本来获得这个模板。在模板中,您可以将IsEnabled属性设置为Setter,并将其值绑定到任何要绑定的值。
<Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}">
...
<Setter Property="IsEnabled" Value="{Binding Active}"/>
...
</Style>
恕我直言,最好的方法是使用DataTriggers
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger *insert condition*>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
好,我可以隐藏他们。问题是,我没有找到一种方法来遍历ComboBoxItems或通过索引访问它们。 – 2009-06-16 19:15:40