2009-06-16 11 views
1

Есть ли способ отключить все, кроме первых элементов x WPF ComboBox, путем доступа к свойствам своих объектов через индекс?Как отключить элементы Combobox?

редактировать:

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

работы

ответ

2

EDIT: Похоже, вы нашли способ добраться до ComboBoxItems. Вы также можете посмотреть на ItemContainerStyle и посмотреть, есть ли какой-то DataBinding, которым вы можете воспользоваться (если ваши объекты имеют свойство Enabled или что-то подобное).

Однако, в зависимости от того, как вы выполняете свой DataBinding, вы можете отображать «отключенные» элементы в другой кисти, непрозрачности и т. Д. С помощью DataTemplates. У Bea Stollnitz есть хорошая статья об этом here.

Одна вещь, которую вы, возможно, захотите рассмотреть с точки зрения UX, - это то, почему вы хотите сделать их отключенными, а не скрытыми. Есть ли какая-то прогрессивная тактика раскрытия, которую вы можете использовать, чтобы не иметь ComboBox, наполненный вещами, которые пользователь не может щелкнуть?

+0

хорошо, я мог бы скрыть их. Проблема в том, что я не нашел способа перебора через ComboBoxItems или доступа к ним через индекс. –

+0

Узнайте что-то новое каждый день. Должен быть способ использовать DataBinding и создание контейнеров, чтобы сделать это за пределами кода? – micahtan

0

Я не знаю способа фактически отключить элементы в ComboBox, но вы должны быть в состоянии добавить логику к вашему событию OnClick, который будет проверять, индекс выбранного элемента> = x и запрещает любую операцию, запрошенную на основании этого.

2

Вы можете установить ItemContainerStyle в Combobox. Из Blend - создайте копию текущего, чтобы получить этот шаблон. В шаблоне вы можете установить свойство 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> 
Смежные вопросы