Ich habe eine Schaltfläche auf meiner Seite mit dieser XAML:
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Bottom"
Width="50" Height="50" HorizontalContentAlignment="Left"
BorderBrush="{x:Null}" Foreground="{x:Null}" Margin="50,0,0,0">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Green"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Wenn ich jedoch mit der Maus über meine Schaltfläche fahre, ändert sich der Hintergrund der Schaltfläche in den grauen Standardhintergrund von Windows.
Was ist das Problem?
Dies ist das Schaltflächenbild vor und nach dem Mouseover:
Vorher: Nachher
:
Forward-48.png
und IsMouseOver auslösen, um es für dasselbe zu ändernForward-48.png
. Ich versuche, Ihren Code mit verschiedenen Bildern zu verwenden, und ich habe alle gut funktioniert.Antworten:
Um das Standardverhalten
MouseOver
auf dem zu entfernen,Button
müssen Sie das ändernControlTemplate
. Das Ändern IhrerStyle
Definition in Folgendes sollte den Trick tun:BEARBEITEN: Es ist ein paar Jahre zu spät, aber Sie können den Randpinsel tatsächlich innerhalb des Randes setzen, der sich dort befindet. Idk, wenn darauf hingewiesen wurde, aber es scheint nicht so, als ob es ...
quelle
ControlTemplate
, sodass die OP-Style
Trigger überschrieben werden .ControlTemplate
sagt im Grunde ' Farbrand entsprechend derBackground
Farbe malen . Und wenn sich die Maus über der Schaltfläche befindet, malen Sie stattdessen diesen Rand dieser Farbe, während Sie im Stil nur Zugriff auf dieBackground
Farbe und nicht auf die zugrunde liegende Rahmenfarbe haben. Ich sehe Sie jedoch zeigen, WPF Styling lässt zu wünschen übrig ...Bei allen bisherigen Antworten wird das Standardverhalten der Schaltflächen vollständig durch etwas anderes ersetzt. IMHO ist es jedoch nützlich und wichtig zu verstehen, dass es möglich ist, nur den Teil zu ändern, der Ihnen wichtig ist , indem Sie die vorhandene Standardvorlage für ein XAML-Element bearbeiten.
Wenn Sie sich mit dem Hover-Effekt auf einer WPF-Schaltfläche befassen, wird die Änderung des Erscheinungsbilds in einem WPF-
Button
Element durch aTrigger
im Standardstil für das verursachtButton
, der auf derIsMouseOver
Eigenschaft basiert und dieBackground
undBorderBrush
Eigenschaften desBorder
Elements der obersten Ebene festlegt in der Kontrollvorlage. DerButton
Hintergrund desBorder
Elements befindet sich unter dem Hintergrund des Elements. Wenn Sie also dieButton.Background
Eigenschaft ändern , wird der Hover-Effekt nicht sichtbar.Mit etwas Aufwand könnten Sie dieses Verhalten mit Ihrem eigenen Setter überschreiben. Da sich das zu beeinflussende Element jedoch in der Vorlage befindet und in Ihrer eigenen XAML nicht direkt verfügbar ist, wäre dieser Ansatz schwierig und meiner Meinung nach zu komplex.
Eine andere Möglichkeit wäre, die Grafik eher
Content
für dieButton
als für die zu verwendenBackground
. Wenn Sie zusätzlichen Inhalt über die Grafik benötigen, können Sie diese mit einemGrid
Objekt der obersten Ebene im Inhalt kombinieren .Wenn Sie den Hover-Effekt jedoch buchstäblich nur vollständig deaktivieren möchten (anstatt ihn nur auszublenden), können Sie den Visual Studio XAML Designer verwenden:
<Trigger Property="IsMouseOver" Value="true">...</Trigger>
. Natürlich können Sie an dieser Stelle jede gewünschte Änderung an der Vorlage vornehmen.Wenn Sie fertig sind, sieht der Schaltflächenstil ungefähr so aus:
(Hinweis: Sie können die
p:
XML-Namespace-Qualifikationen im eigentlichen Code weglassen. Ich stelle sie hier nur zur Verfügung, weil der XML-Code-Formatierer für Stapelüberlauf durch<Style/>
Elemente verwechselt wird , die keinen vollständig qualifizierten Namen mit XML-Namespace haben.)Wenn Sie denselben Stil auf andere Schaltflächen anwenden möchten, können Sie einfach mit der rechten Maustaste darauf klicken und "Vorlage bearbeiten / Ressource anwenden" auswählen und den Stil auswählen, den Sie gerade für die erste Schaltfläche hinzugefügt haben. Sie können diesen Stil sogar zum Standardstil für alle Schaltflächen machen, indem Sie die normalen Techniken zum Anwenden eines Standardstils auf Elemente in XAML verwenden.
quelle
Das hat bei mir gut funktioniert.
Tastenstil
Taste
Anmerkungen
quelle
Stroke
Farbe auch beim Schweben ändernBorder
, ohne dass sie nur über dem schwebtPath
?x:Key="TransparentStyle"
Teil und die Verwendung waren wichtig für mich, um dorthin zu gelangen ... Danke!Ich möchte nur meinen Schaltflächenstil aus meinem von mir verwendeten ResourceDictionary freigeben. Sie können den onHover-Hintergrund an den Stilauslösern frei ändern. " ColorAnimation To = * Ihr gewünschter Hintergrund (dh # FFCEF7A0)". Die Schaltfläche Hintergrund wird auch nach dem Status mouseOver automatisch auf den ursprünglichen Hintergrund zurückgesetzt. Sie können sogar festlegen, wie schnell der Übergang erfolgen soll.
Ressourcenwörterbuch
Alles was Sie tun müssen, ist den Stil zu nennen.
Beispielimplementierung
quelle
Eine etwas schwierigere Antwort, die ControlTemplate verwendet und einen Animationseffekt hat (angepasst von https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/customizing-the-appearance-of-an-existing- Kontrolle )
Definieren Sie in Ihrem Ressourcenwörterbuch eine Steuerungsvorlage für Ihre Schaltfläche wie die folgende:
In Ihrer XAML können Sie die Vorlage oben für Ihre Schaltfläche wie folgt verwenden:
Definieren Sie Ihre Schaltfläche
Ich hoffe es hilft
quelle
Zum Ändern des Schaltflächenstils
1. Ressourcenstile definieren
2. Tastencode definieren
3. Code dahinter
quelle