Question

Y a-t-il un moyen de désactiver tous les x éléments d'un ComboBox WPF, à l'exception des premiers x, en accédant aux propriétés de ses éléments via un index?

modifier:

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

fonctionne

Était-ce utile?

La solution

EDIT: On dirait que vous avez trouvé un moyen d'obtenir les ComboBoxItems. Vous pouvez également consulter ItemContainerStyle pour voir s’il existe une DataBinding dont vous pouvez tirer parti (si vos éléments possèdent une propriété Enabled ou quelque chose de similaire).

Toutefois, en fonction de la manière dont vous effectuez votre liaison de données, vous pourrez peut-être afficher votre affichage "désactivé". éléments dans un pinceau, une opacité, etc. différents en utilisant DataTemplates. Bea Stollnitz a un bon message à ce sujet, ici .

Du point de vue de l’UX, vous voudrez peut-être envisager de les rendre désactivés par opposition à cachés. Existe-t-il une sorte de tactique de divulgation progressive dont vous pouvez tirer parti pour ne pas avoir une zone de liste déroulante remplie d'éléments sur lesquels l'utilisateur ne peut pas cliquer?

Autres conseils

Vous pouvez définir un ItemContainerStyle sur la liste déroulante. From Blend - créez une copie de current 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 à celui que vous souhaitez lier.

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

Je ne connais pas de moyen de désactiver les éléments d'une liste déroulante, mais vous devriez pouvoir ajouter une logique à votre événement OnClick pour vérifier si l'index de l'élément sélectionné est > = x et refuser toute opération demandée. sur cette base.

À mon humble avis, 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top