{TemplateBinding}-Markuperweiterung
Verknüpft den Wert einer Eigenschaft in einer Steuerelementvorlage mit dem Wert einer anderen verfügbar gemachten Eigenschaft im vorlagenbasierten Steuerelement. TemplateBinding kann nur in einer ControlTemplate-Definition in XAML verwendet werden.
XAML-Attributsyntax
<object propertyName="{TemplateBinding sourceProperty}" .../>
XAML-Attributverwendung (für Setter-Eigenschaft in Vorlage oder Formatvorlage)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>
XAML-Werte
Begriff | Beschreibung |
---|---|
propertyName | Der Name der Eigenschaft, die in der Settersyntax festgelegt wird. Dies muss eine Abhängigkeitseigenschaft sein. |
sourceProperty | Der Name einer anderen Abhängigkeitseigenschaft, die für den Typ vorhanden ist, der vorlaged ist. |
Hinweise
Die Verwendung von TemplateBinding ist ein grundlegender Bestandteil der Definition einer Steuerelementvorlage, entweder wenn Sie ein benutzerdefinierter Steuerelementautor sind oder eine Steuerelementvorlage für vorhandene Steuerelemente ersetzen. Weitere Informationen finden Sie in der Schnellstartanleitung: Steuerelementvorlagen.
Für propertyName und targetProperty wird häufig derselbe Eigenschaftsname verwendet. In diesem Fall kann ein Steuerelement eine Eigenschaft für sich selbst definieren und die Eigenschaft an eine vorhandene und intuitiv benannte Eigenschaft eines seiner Komponententeile weiterleiten. Beispielsweise kann ein Steuerelement, das einen TextBlock in seine Compositing integriert, das zum Anzeigen der eigenen Texteigenschaft des Steuerelements verwendet wird, diesen XAML-Code als Teil in der Steuerelementvorlage enthalten:<TextBlock Text="{TemplateBinding Text}" .... />
Die Typen, die als Wert für die Quelleigenschaft und die Zieleigenschaft verwendet werden, müssen übereinstimmen. Es gibt keine Möglichkeit, einen Konverter einzuführen, wenn Sie TemplateBinding verwenden. Fehler beim Abgleichen von Werten beim Analysieren des XAML-Codes. Wenn Sie einen Konverter benötigen, können Sie die ausführliche Syntax für eine Vorlagenbindung verwenden, z. B.: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}
Der Versuch, eine TemplateBinding außerhalb einer ControlTemplate-Definition in XAML zu verwenden, führt zu einem Parserfehler.
Sie können TemplateBinding für Fälle verwenden, in denen der übergeordnete Vorlagenwert auch als eine andere Bindung zurückgestellt wird. Die Auswertung für TemplateBinding kann warten, bis alle erforderlichen Laufzeitbindungen Werte aufweisen.
Ein TemplateBinding ist immer eine unidirektionale Bindung. Beide betroffenen Eigenschaften müssen Abhängigkeitseigenschaften sein.
TemplateBinding ist eine Markuperweiterung. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften erfüllt werden soll. Alle Markuperweiterungen in XAML verwenden die Zeichen "{" und "}" in ihrer Attributsyntax. Dies ist die Konvention, mit der ein XAML-Prozessor erkennt, dass eine Markuperweiterung das Attribut verarbeiten muss.
Hinweis In der Windows-Runtime XAML-Prozessorimplementierung gibt es keine Sicherungsklassendarstellung für TemplateBinding. TemplateBinding ist ausschließlich für die Verwendung im XAML-Markup vorgesehen. Es gibt keine einfache Möglichkeit, das Verhalten im Code zu reproduzieren.
x:Bind in ControlTemplate
Hinweis
Die Verwendung von x:Bind in einer ControlTemplate erfordert Windows 10, Version 1809 (SDK 17763) oder höher. Weitere Informationen zu Zielversionen finden Sie unter Versionsadaptiver Code.
Ab Windows 10, Version 1809, können Sie die x:Bind-Markuperweiterung überall verwenden, wo Sie TemplateBinding in einer ControlTemplate verwenden.
Die TargetType-Eigenschaft ist für ControlTemplate bei Verwendung von x:Bind (nicht optional) erforderlich.
Mit x:Bind-Unterstützung können Sie sowohl Funktionsbindungen als auch bidirektionale Bindungen in einer ControlTemplate verwenden.
In diesem Beispiel wird die TextBlock.Text-Eigenschaft als Button.Content.ToString ausgewertet. Der TargetType für die ControlTemplate fungiert als Datenquelle und erreicht dasselbe Ergebnis wie ein TemplateBinding-Element als übergeordnetes Element.
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
</Grid>
</ControlTemplate>