{TemplateBinding}-Markuperweiterung

Verknüpft den Wert einer Eigenschaft in einer Steuerelementvorlage mit dem Wert einer anderen Eigenschaft, die im Steuerelement mit Vorlagen verfügbar gemacht wird. TemplateBinding kann nur innerhalb einer ControlTemplate-Definition in XAML verwendet werden.

XAML-Attributsyntax

<object propertyName="{TemplateBinding sourceProperty}" .../>

XAML-Attributsyntax (für die Setter-Eigenschaft in einer Vorlage oder Formatvorlage)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>

XAML-Werte

Begriff BESCHREIBUNG
propertyName Der Name der Eigenschaft, die in der Setter-Syntax festgelegt wird. Diese Eigenschaft muss eine Abhängigkeitseigenschaft sein.
sourceProperty Der Name einer anderen Abhängigkeitseigenschaft, die für den als Vorlage festgelegten Typ vorhanden ist.

Hinweise

Die Verwendung von TemplateBinding ist ein grundlegender Punkt beim Definieren einer Steuerelementvorlage, wenn Sie entweder ein Autor von benutzerdefinierten Steuerelementen sind oder eine Steuerelementvorlage für vorhandene Steuerelemente ersetzen. Weitere Informationen finden Sie unter Schnellstart: 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 diese an eine vorhandene, intuitiv benannte Eigenschaft eines seiner Komponententeile weiterleiten. Beispielsweise kann ein Steuerelement, das einen TextBlock in das Compositing integriert, das zum Anzeigen der eigenen Text-Eigenschaft 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. Bei Verwendung von TemplateBinding gibt es keine Möglichkeit, einen Konverter zu nutzen. Falls die Werte nicht übereinstimmen, tritt beim Analysieren des XAML-Codes ein Fehler auf. 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="..." ...}

Wenn Sie versuchen, eine TemplateBinding außerhalb einer ControlTemplate-Definition in XAML zu verwenden, führt dies zu einem Parserfehler.

Sie können TemplateBinding für Fälle verwenden, in denen der übergeordnete Wert mit Vorlagen auch als weitere Bindung zurückgestellt wird. Die Auswertung für TemplateBinding kann warten, bis etwaige erforderliche Laufzeitbindungen über Werte verfügen.

Ein TemplateBinding-Element ist stets 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. Anhand dieser Konvention erkennt ein XAML-Prozessor, dass eine Markuperweiterung das Attribut verarbeiten muss.

Hinweis In der Windows-Runtime XAML-Prozessorimplementierung gibt es keine Unterstützungsklassendarstellung für TemplateBinding. TemplateBinding ist ausschließlich für die Verwendung im XAML-Markup vorgesehen. Es gibt keine einfache Methode zum Reproduzieren des Verhaltens im Code.

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 erforderlich (nicht optional), wenn x:Bind verwendet wird.

Mit der 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 in Button.Content.ToString ausgewertet. TargetType in der ControlTemplate fungiert als Datenquelle und erreicht das gleiche Ergebnis wie eine TemplateBinding to parent.

<ControlTemplate TargetType="Button">
    <Grid>
        <TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
    </Grid>
</ControlTemplate>