2009-06-16 17 views
1

インデックスを介して項目のプロパティにアクセスして、WPFコンボボックスの最初のx項目を除くすべての項目を無効にする方法はありますか?コンボボックスアイテムを無効にする方法は?

編集:

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

私はコンボボックス内の項目を無効にするには、実際に方法を知っていませんが、あなたがいるかどうかを確認しますあなたのOnClickイベントにロジックを追加することができるはず

答えて

2

EDIT: ComboBoxItemsにアクセスする方法が見つかったようです。また、ItemContainerStyleを見て、いくつかのデータバインディングがあるかどうかを確認することもできます(アイテムにEnabledプロパティなどがある場合)。

ただし、DataBindingのやり方によっては、DataTemplatesを使用して別のBrush、Opacityなどで「無効」アイテムを表示することができます。 Bea Stollnitzはそのことに関して良い投稿をしていますhere

UXの観点から考えておきたいことの1つは、非表示にする代わりに無効にする理由です。コンボボックスにユーザーがクリックできないものがないようにするために利用できるプログレッシブ開示戦術がありますか?

+0

もDataTriggersを使用することです。問題はむしろComboBoxItemsを繰り返し処理する方法やインデックスを介してアクセスする方法が見つからないということです。 –

+0

新しい何かを毎日新しいことを学ぼう。 DataBindingとコンテナ生成を利用してコードビハインドの外側でこれを行う方法になりましたか? – micahtan

0

の作品選択されたアイテムのインデックスは> = xであり、それに基づいて要求された操作は禁止されます。

2

コンボボックスでItemContainerStyleを設定できます。ブレンドから - 現在のコピーを作成してこのテンプレートを取得します。テンプレートでは、IsEnabledプロパティをSetterとして設定し、バインドする値にバインドします。

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

私見、最善のアプローチは、私もそれを隠すことができ、

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
     <Style.Triggers> 
      <DataTrigger *insert condition*> 
       <Setter Property="IsEnabled" Value="False"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ComboBox.ItemContainerStyle> 
関連する問題