6
votes

Définir une propriété isenabled de Combobox basée sur la sélection de schémase

Je veux activer / désactiver un ComboBox sur la base d'un élément sélectionné dans une autre ComboBox. J'ai pu le faire fonctionner en définissant une gâchette sur le style, mais qui remplace mon style mondial sur mesure pour la combinaison. Y a-t-il une autre façon d'obtenir la même fonctionnalité sans perdre mon style? XXX


1 commentaires

Fwiw, j'ai eu ceci fonctionne avec un style et je préfère cela au convertisseur car c'est tout dans xaml. Je n'avais pas besoin d'un setter pour spécifier que l'isenabled doit être vrai lorsque la gâchette n'est pas active. Je pose cela pour les autres personnes qui rencontrent cette question, de sorte qu'ils n'ont pas l'impression que cela ne peut pas être fait avec un style.


3 Réponses :


6
votes

Oui, vous pouvez définir basé sur l'attribut à "hériter" de votre style global: xxx

au lieu de {staticresource {x: type Combobox}} Vous pouvez définir la clé de votre style global (si ce n'est pas implicite).

Mais pour cette tâche particulière, vous n'avez pas besoin de définir un style. Vous pouvez simplement définir une liaison à une propriété isenabled et utiliser un convertisseur pour convertir l'élément sélectionné d'une autre boîte de liste déroulante sur un booléen: xxx


1 commentaires

UPVOTE que cela fonctionne aussi bien. J'ai décidé que l'option de convertisseur était plus propre que je l'ai donc marquée comme correcte.



10
votes

Vous n'avez pas besoin de le faire via un style, vous pouvez lier la propriété isenabled directement à l'aide d'un convertisseur de valeur comme suit:

public class NullToFalseConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value == null;
    }

    public object ConvertBack(object value, Type targetType,
      object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


3 commentaires

Je ne peux pas sembler avoir la liaison à NulltofalSecverter pour fonctionner correctement. Je continue à obtenir une exception: "Impossible de trouver des ressources nommées" NulltofalSeconverter ". Les noms de ressources sont sensibles à la casse.". Aider? Désolé, je suis assez nouveau à WPF: - /


@Kristrip Vous devez réellement déclarer une instance du convertisseur, quelque part. Notez que @Coline le référencit comme un staticresource . Cela signifie que vous avez besoin d'une entrée dans la collection de ressources de tout ce qui contient votre Combobox qui ressemble à ceci:


Je pense que la mise en œuvre du convertisseur est fausse, il devrait être et il n'est pas nécessaire de déclarer une instance. Au moins je ne l'ai pas et ça marche.



0
votes

Vous pouvez simplement avoir une liaison "normale", avec un convertisseur de valeur pour changer "la valeur existez" => vrai, "la valeur est null" => false.


0 commentaires