WPF ControlTemplate: Wie wird ein Standardwert für TemplateBinding bereitgestellt?
Ich Schreibe eine WPF-Steuerelement, dass Unterklassen eine Schaltfläche. Ich habe dann eine Standard-Stil in Themes\generic.xaml, das sieht dann so aus (vereinfacht):
<Style TargetType="{x:Type WPFControls:MyButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type WPFControls:MyButton}">
<Button
x:Name="PART_Button"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Möchte ich dem Benutzer die Möglichkeit zum ändern des Steuerelements hintergrund, aber wenn er das nicht tut, würde ich gerne default-Wert. Wie mache ich es?
Wenn ich es mache wie in dem geposteten code, den Hintergrund und die BorderBrush-ist null (= nicht existent), es sei denn, der Benutzer gibt explizit an (was effektiv zwingt Nutzer immer einen bestimmten Wert), aber der standard-windows-Steuerelemente (wie Schaltflächen) bieten einen Standard-look, können noch angepasst werden, indem Benutzer. Wie dies in meiner Kontrolle?
Danke!
Lösung von Michael Morton:
Können Sie Standard setter in der Art:
<Style TargetType="{x:Type TestTemplate:MyButton}">
<Setter Property="Background" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TestTemplate:MyButton}">
<Button
x:Name="PART_Button"
IsEnabled="{TemplateBinding IsEnabled}"
Content="{TemplateBinding Content}"
Background="{TemplateBinding Background}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Verwendung:
<StackPanel>
<TestTemplate:MyButton Background="Blue">Explicitly blue</TestTemplate:MyButton>
<TestTemplate:MyButton>Naturally red</TestTemplate:MyButton>
</StackPanel>
InformationsquelleAutor der Frage Tomáš Kafka | 2009-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur definieren, setter auf Ihren Stil für die zwei Eigenschaften in Frage stellen.
Zum Beispiel, einige Allgemeine Definitionen:
Dann in deine style-definition:
InformationsquelleAutor der Antwort Michael Morton
Beim deklarieren einer Abhängigkeitseigenschaft, die für Ihre Steuerelemente, die Sie auch erklären, die standardmäßig als UIPropertyMetadata
diese Eigenschaft standardmäßig auf die Bürsten.Rot, wie Sie sehen können, in der letzten Zeile.
den anderen Weg, Sie könnte es tun ist durch die Einstellung der Standard-Farbe in den Konstruktor des benutzerdefinierten Steuerelements, wie der Konstruktor wird immer aufgerufen, bevor alle Eigenschaften, die durch den Benutzer eingestellt werden, wenn der Benutzer nicht eingestellt, wären Sie Standard zu verkaufen. In der Tat, Sie würden immer durch und dann keine Benutzer-Einstellung überschreiben verkaufen. Dies ist das esp wirksam, wenn Sie möchten, legen Sie die Eigenschaften wie Hintergrund, den du eigentlich nicht erstellen, die diejenigen, die aus Ihrem der Basis-Klassen, die Sie Erben.
InformationsquelleAutor der Antwort Aran Mulholland
Ist es auch möglich, zu "Erben" Standard-Stil der
Button
element erstellen von sample-Instanz und verweisen auf seine Eigenschaften:InformationsquelleAutor der Antwort Marcin Wisnicki
Achten Sie auf seccond-string, habe ich die Schwarze Farbe Hintergrund Standardwert.
InformationsquelleAutor der Antwort Marat Batalandabad