2009-06-16 106 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>