2009-06-16 7 views
1

Est-il possible de désactiver tous les éléments x d'un WPF ComboBox en accédant aux propriétés de ses éléments via un index?Comment désactiver les objets Combobox?

modifier:

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

fonctionne

Répondre

2

EDIT: On dirait que vous avez trouvé un moyen d'accéder aux ComboBoxItems. Vous pouvez également regarder ItemContainerStyle et voir s'il existe des DataBinding dont vous pouvez tirer parti (si vos éléments ont une propriété Enabled ou quelque chose de similaire). Toutefois, en fonction de la manière dont vous effectuez votre DataBinding, vous pouvez afficher vos éléments "désactivés" dans un autre Pinceau, Opacité, etc. à l'aide de DataTemplates. Bea Stollnitz a un bon post à ce sujet here. Une chose que vous pourriez vouloir considérer d'un point de vue UX est pourquoi vous voulez les rendre handicapés au lieu de cachés. Y at-il une sorte de tactique de divulgation progressive dont vous pouvez profiter pour ne pas avoir un ComboBox rempli de choses que l'utilisateur ne peut pas cliquer?

+0

, je pouvais les cacher aussi bien. Le problème est plutôt que je n'ai pas trouvé un moyen de parcourir les ComboBoxItems ou d'y accéder via un index. –

+0

Apprenez quelque chose de nouveau chaque jour. Vous devez être un moyen de tirer parti de DataBinding et de la génération de conteneur pour le faire en dehors du code-behind? – micahtan

0

Je ne sais pas d'une manière réellement désactiver des éléments dans une zone de liste déroulante, mais vous devriez être en mesure d'ajouter une logique à votre événement onclick qui va vérifier si l'index de l'élément sélectionné est> = x et n'autorise aucune opération demandée sur cette base.

2

Vous pouvez définir un objet ItemContainerStyle sur le Combobox. À partir de Blend - créez une copie du courant pour obtenir ce modèle. Dans le modèle, vous pouvez définir la propriété IsEnabled en tant que Setter et lier sa valeur à tout ce que vous voulez lier.

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

IMHO, la meilleure approche consiste à utiliser DataTriggers

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
     <Style.Triggers> 
      <DataTrigger *insert condition*> 
       <Setter Property="IsEnabled" Value="False"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ComboBox.ItemContainerStyle> 
bien