2017-02-23 1 views
0

Ich versuche, einige Schaltflächen in einer WPF-Anwendung zu erstellen, die Triggerereignisse basierend auf dem haben, was gerade für die Schaltfläche ausgeführt wird. Ich habe Probleme, mehrere Trigger-Ereignisse hinzuzufügen. Im folgenden Code funktioniert der Trigger für isPressed nicht, aber isMouseOver tut dies. Wenn ich einen der Auslöser lösche, funktioniert es, aber sie arbeiten nie zusammen.Probleme mit WPF-Triggerereignissen

Ich muss auch eine Bildänderung hinzufügen, wenn die Schaltfläche deaktiviert ist, aber die Trigger-Eigenschaft scheint nichts für deaktiviert zu enthalten. Möglicherweise muss ich diese Änderung im C# -Code vornehmen. Wenn jemand eine Idee dafür hat, wäre es großartig!

Jede Hilfe wird geschätzt!

<Button Name="testbutton"  
     Background="Transparent" 
     Cursor="Hand" 
     Visibility="Visible" Grid.Column="2" Grid.Row="1" Margin="10" ToolTip="Exits The Application"> 
      <Button.Template> 
       <ControlTemplate TargetType="Button"> 
        <StackPanel> 
         <Image Name="exitstatic" 
           Source="{StaticResource exit static}" 
           Stretch="Fill" 
           Visibility="Visible" /> 
         <Image Name="exithover" 
           Source="{StaticResource exit hover}" 
           Stretch="Fill" 
           Visibility="Collapsed" /> 
         <Image Name="exitdisabled" 
           Source="{StaticResource exit disabled}" 
           Stretch="Fill" 
           Visibility="Collapsed" /> 
        </StackPanel> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsPressed" 
           Value="true"> 
          <Setter TargetName="exitdisabled" 
            Property="Visibility" 
            Value="Visible" /> 
          <Setter TargetName="exithover" 
            Property="Visibility" 
            Value="Collapsed" /> 
         </Trigger> 

         <Trigger Property="IsMouseOver" 
             Value="true"> 
          <Setter TargetName="exithover" 
            Property="Visibility" 
            Value="Visible" /> 
          <Setter TargetName="exitstatic" 
            Property="Visibility" 
            Value="Collapsed" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 

Antwort

1

Wenn IsPressed wahr ist, IsMouseOver ist auch wahr, nur weil die Maus da zu sein hat, die Sache zu drücken. In der Tat werden die IsPressed Trigger-Setter angewendet, aber dann die IsMouseOver Trigger-Setter angewendet werden und Schritt auf was die IsPressed Setter getan haben.

Die Reihenfolge der beiden Trigger umkehren, sodass der IsPressed Trigger als zweiter ausgewertet wird und stattdessen die Werte von IsPressed gesetzt werden. Dies ist ein häufiges Problem mit Triggern.

Ich hatte nie Probleme mit <Trigger Property="IsEnabled" Value="False">, soweit Ihre zweite Frage betroffen ist.

+0

@ mcavanaugh418, Einverstanden, die Trigger werden sequenziell wie aufgeführt verarbeitet ... was immer zuletzt ist, gewinnt. – DRapp

+1

Danke Ed. Es war so einfach, dass ich nicht glauben kann, dass ich das überhaupt nicht verstanden habe. Außerdem muss ich die IsEnabled-Eigenschaft verpasst haben. Danke, dass du darauf aufmerksam gemacht hast, genau was ich gebraucht habe. – mcavanaugh418