有沒有辦法通過索引訪問其項目的屬性來禁用除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