2010-11-23 34 views
1

Mon bouton est censé changer de couleur après un certain nombre de dépassements de la souris, cependant Multibinding ne fonctionne pas correctement.MultiTrigger s'exécute une seule fois

Les boutons de mon application a le style suivant:

<Style TargetType="Button"> 
     <EventSetter Event="MouseEnter" Handler="OnMouseEnterButton"/> 
     <Style.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="Content" Value="0"/> 
        <Condition Property="IsMouseOver" Value="False"/> 
       </MultiTrigger.Conditions> 

       <MultiTrigger.Setters> 
        <Setter Property="Background" Value="Green"/> 
       </MultiTrigger.Setters> 
      </MultiTrigger> 
     </Style.Triggers> 
    </Style> 

My Button ressemble à ceci:

<Button Name="button1">1</Button> 

Avec le gestionnaire d'événement suivant:

private void OnMouseEnterButton(object sender, RoutedEventArgs e) 
{ 
    ((Button)sender).Content = (int.Parse(((Button)sender).Content.ToString())) + 1; 
} 

Toutefois, si la valeur de la condition Button.Content est différente de la valeur initiale. Par exemple: <Condition Property="Content" Value="10"/> Les déclencheurs cessent de fonctionner.

Répondre

2

Le problème est que vous comparez une valeur System.Int32 (définie dans le code) avec une valeur System.String (définie dans la condition).

Il y a deux façons de résoudre ce:

1) état de style Changer à:

<Condition Property="Content"> 
     <Condition.Value> 
      <sys:Int32>10</sys:Int32> 
     </Condition.Value> 
    </Condition> 

où vous devez ajouter un espace de noms xmlns:sys="clr-namespace:System;assembly=mscorlib"

ou changer votre code à:

((Button)sender).Content = ((int.Parse(((Button)sender).Content.ToString())) + 1).ToString(); 
+0

Merci! Oui, je n'ai pas arboré que je ne le convertis pas en ficelle! – Vitalij