2017-11-23 1 views
2

Ich komme gerade in WPF. Ich habe zwei Ereignisbehandlungsroutinen:Der Hintergrund ändert sich in Mouse_Leave, aber nicht in Mouse_Enter

private void Mouse_Enter(object sender, MouseEventArgs e) 
{ 
    ((Button)sender).Background = Brushes.Red; 
} 
private void Mouse_Leave(object sender, MouseEventArgs e) 
{ 
    ((Button)sender).Background = Brushes.Black; 
} 

Wenn die Maus in den Bereich der Schaltfläche eintritt, passiert nichts. Wenn Sie jedoch den Bereich der Schaltfläche verlassen, wird die Schaltfläche schwarz. Ich habe einen Haltepunkt innerhalb gesetzt und es führt definitiv die Methode aus, ändert gerade nicht die Hintergrundfarbe.

Wie es zu beheben? Vielen Dank!

+0

Ändert Ihre Schaltfläche die Farbe zu der Standardfarbe "Schaltfläche Hover", wenn Ihre Maus eingibt? – Fleury26

+0

@ Fleury26 Ja, tut es. –

+2

Wenn es nicht im C# -Code sein muss und im XAML sein kann, schlage ich vor, [diese Antwort] zu betrachten (https://stackoverflow.com/questions/20073294/change-color-of-button-when- Mouse-is-over) – Fleury26

Antwort

0

Dies passiert, weil in der Standardschaltflächenvorlage ein "eingebauter" Auslöser vorhanden ist, der dazu führt, dass die Schaltfläche Ihre Versuche ignoriert, den Hintergrund bei einem MouseEnter-Ereignis zu ändern. Sie müssen die Vorlage bearbeiten und den Auslöser deaktivieren Führen Sie zuerst die folgenden Schritte aus:

Klicken Sie im Visual Studio-Editor mit der rechten Maustaste auf Ihre Schaltfläche und wählen Sie "Vorlage bearbeiten" und dann "Kopie bearbeiten ...". Geben Sie Ihren Stil ein und suchen Sie im XAML nach einem Trigger "IsMouseOver" und löschen Sie die 2 Zeilen darunter.

    <ControlTemplate.Triggers> 
         <Trigger Property="IsDefaulted" Value="true"> 
          <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="true"> 
    --- Delete this line <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/> 
    --- Delete this line <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
+0

Vielen Dank, aber ich wirklich möchte es mit Code-Behind tun. Natürlich nicht für Produktionszwecke, sondern nur zum Lernen. Könntest du mir bitte erklären, wie ich es reparieren würde, ohne XAML-Trigger zu verwenden? Danke noch einmal! –

Verwandte Themen