WPF-button style-und template
So, ich habe den button und seinen Stil:
<Style TargetType="Button" x:Key="BaseButtonStyle">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Width" Value="120" />
<Setter Property="Height" Value="30" />
<Setter Property="BorderBrush" Value="#1FA3FF" />
</Style>
<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="#1FA3EB" />
<Setter Property="Foreground" Value="#FFFFFF" />
</Style>
<Button Style="{StaticResource MyButtonStyle}" Content="My text" />
Funktioniert es einwandfrei und ich habe die folgenden Ergebnisse (Aquamarin hintergrund ist nicht Teil der Schaltfläche, gehört es zum Fenster):
Aber dann möchte ich ersetzen-Schaltfläche in die Inhalte und ändern mein Stil so:
<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="#1FA3EB" />
<Setter Property="Foreground" Value="#FFFFFF" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="√" />
<TextBlock Text="{TemplateBinding Button.Content}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
und jetzt ist mein Knopf wird schrecklich:
Wie Sie sehen können, meinen Knopf verloren Ihre Grenzen-und hintergrund und es ändert nicht seine Ansicht, wenn mit der Maus darübergefahren wird. Wo bin ich falsch und was muss ich tun um es zu verhindern?
UPD
wenn ich etwas wie das hier tun:
<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="#1FA3EB" />
<Setter Property="Foreground" Value="#FFFFFF" />
<Setter Property="Content" >
<Setter.Value>
<StackPanel Orientation="Horizontal">
<TextBlock Text="√" />
<TextBlock Text="{TemplateBinding Button.Content}" />
</StackPanel>
</Setter.Value>
</Setter>
</Style>
dann bekomme ich dieses Ergebnis:
Wie Sie sehen können, ist ähnlich wie die firstresult, wo das Häkchen fehlt
- Es ist, weil Sie die geänderte Vorlage, so dass Sie entfernt Standardansicht für die
Button
und ersetzt es mitStackPanel
. BTW du kannst dieseStackPanel
direkt als Inhalt, ohne änderung der Vorlage.Content
kann alles sein, nicht nur text - aber wenn ich StackPanel-Element als Inhalt kann ich nicht binden Inhalt korrekt((
- So hast du eine Lösung finden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Aussehen und die Funktionalität der Standard -
Button
ist definiert in der Standard -ControlTemplate
für dieButton
(Sie können feststellen, dass in der Button-Stile und Vorlagen - Seite auf MSDN). So ändern Sie dieControlTemplate
, das Standard-Aussehen und Verhalten ist jetzt Weg und ersetzt Sie durch Ihre plainStackPanel
undTextBlock
Elemente.Wenn eine neue
ControlTemplate
für die Kontrollen, ist es eine gute Idee zu Beginn mit der Standard -ControlTemplate
und kleine änderungen vornehmen, bis Sie Ihre gewünschte Aussehen. Hier ist eine leichte Streckung zu IhremStyle
bietet einige grundlegende Maus über die Funktionalität:Erfahren Sie mehr über
ControlTemplate
s aus derControlTemplate
Klasse - Seite auf MSDN.Wenn Sie nur ändern, den Inhalt des button, kannst du es so machen:
Diese Weise werden Sie nicht verlieren die grundlegende styling. Die Schaltfläche content-Eigenschaft ist ein Objekt, also es dauert etwas.
Der moment, ändern Sie die template-Steuerelement eine Schaltfläche, alles über Hintergründe, Rahmen, mouseover, pressed Staaten etc. verloren. Der beste Weg, um restyle jedes WPF-Steuerelement ist die grundlegende Vorlage für MSDN-und ändern Sie es, anstatt von Grund auf neu beginnen. Sie finden die Schaltfläche Vorlage hier:
.NET 4.5-Button Vorlage