Warum ist der Button-Hintergrund ändern?
Bin ich einem blutigen Anfänger mit WPF und ich weiß nicht einmal wissen, wo Sie schauen, um herauszufinden, die Antwort auf diese Frage. Dieser XAML-Code scheint sehr unkompliziert zu mir:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Button.Content>Test</Button.Content>
</Button>
</Grid>
</Page>
Wenn ich die Maus über die Schaltfläche IsMouseOver
änderungen True
und der trigger macht das hintergrund-grün. Für eine sofortige. Dann schaltet es blau.
Sogar noch besser: wenn ich befestige die gleichen setter der IsFocused
Eigenschaft, sobald ich den Fokus auf den button die Hintergrundfarbe pocht zwischen grün und blau.
Gibt es etwas, irgendwo in der Schaltfläche (ich vermute, es ist in, was auch immer das Standard-theme wird unter Vista), dass macht es auf diese Weise Verhalten. Ich vermute, dass es eine weitere Eigenschaft, die der Auslöser muss gesetzt werden. Aber was?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern die
Button
'sTemplate
anstatt seineStyle
. Gebaut in der Vorlage ist die so genannte ButtonChrome, und das ist, was die Ursache für das irritierende blau-focus-Effekt. Hier ist eine sehr einfache re-templating derButton
Kontrolle, genommen aus dem Einfachen Stile:Können Sie sehen, dass durch re-Template-control, Sie können ändern, seine visual tree. Die visuelle Struktur in dieser Vorlage ist nichts anderes als eine
Border
enthält eineContentPresenter
(so können Sie den Inhalt der Schaltfläche). Ich habe effektiv entfernt die ButtonChrome aus der visuellen Struktur auf diese Weise.Charlie ' s Antwort ist gut. Ich möchte einfach ergänzen, mit einer Erklärung, was Los war, und einem Kommentar schien nicht der Ort.
Der Grund, warum es grün war für einen Augenblick und wurde dann blau ist, weil das Standard-theme ist
ControlTemplate
fürButton
hatte bereits eineIsMouseOver
Trigger
um den hintergrund zu ändern.Dann Hinzugefügt ein anderes in Ihrem
Style
. Dieses ersetzt nicht die bestehenden, da könnte man mehrereTrigger
s auf die gleiche Eigenschaft und Wert, die haben sehr unterschiedlicheSetter
s und tun völlig unterschiedliche Dinge.Also es wurde versucht, beides zu tun, und Tat den grün-ersten.