2010-02-24 7 views
3

J'apprends actuellement WPF et l'utilisation de MultiTrigger et de conditions pour définir certaines propriétés du contrôle stylé. Je sais que les Conditions d'un MultiTrigger doivent toutes être rencontrées (AND-Operator) pour définir la valeur spécifiée par le Setter.Élément de condition de non-déclenchement ou non pour MultiTrigger

Mais existe-t-il une condition si la valeur n'est pas satisfaite (nommons-la un NotCondition). J'ai un petit exemple pour illustrer ce que je veux dire.

L'arrière-plan-propriété doit être définie à « Red » si la souris est sur le contrôle et le contenu est « Bonjour tout le monde ». L'autre cas est, si la souris est sur et le contenu est pas« Bonjour tout le monde », l'arrière-plan doit être « Blue ».

<MultiTrigger> 
    <MultiTrigger.Conditions> 
    <Condition Property="IsMouseOver" Value="True" /> 
    <Condition Property="Content" Value="Hello World" /> 
    </MultiTrigger.Conditions> 
    <Setter Property="Background" Value="Red"/> 
</MultiTrigger> 
<MultiTrigger> 
    <MultiTrigger.Conditions> 
    <Condition Property="IsMouseOver" Value="True" /> 
    <!--<NotCondition Property="Content" Value="Hello World" />--> 
    </MultiTrigger.Conditions> 
    <Setter Property="Background" Value="Blue"/> 
</MultiTrigger> 

Comment puis-je archiver quelque chose comme ça dans WPF/XAML? Y a-t-il un élément NotCondition ou un attribut sur l'élément Condition pour annuler la comparaison?

Répondre

4

Dans ce cas particulier avec des couleurs, vous pouvez utiliser la priorité des triggers. Par exemple.

<Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="Background" Value="Blue"/> 
</Trigger> 
<MultiTrigger> 
<MultiTrigger.Conditions> 
    <Condition Property="IsMouseOver" Value="True"/> 
    <Condition Property="Text" Value="Hello world"/> 
</MultiTrigger.Conditions> 
<Setter Property="Background" Value="Red"/> 
</MultiTrigger> 

dernier déclencheur remplace à partir du premier déclencheur lorsque les deux souris est terminée et le texte est Bonjour tout le monde.

Il n'y a rien accumulation dans WPF qui vous permet de faire des déclencheurs conditionnels, mais Mike Hillberg a proposé une solution très interseting pour ce problème: A Comparable DataTrigger

Hope this helps,

Cheers, Anvaka .