Freigeben über


{TemplateBinding}-Markup-Erweiterung

Verknüpft den Wert einer Eigenschaft in einer Steuerelementvorlage mit dem Wert einer anderen verfügbar gemachten Eigenschaft im vorlagenbasierten Steuerelement. TemplateBinding kann nur innerhalb einer ControlTemplate Definition in XAML verwendet werden.

XAML-Attributverwendung

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

XAML-Attributverwendung (für Setter-Eigenschaft in Vorlage oder Stil)

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

XAML-Werte

Begriff BESCHREIBUNG
Eigenschaftsname Der Name der Eigenschaft, die in der Settersyntax festgelegt wird. Dies muss eine Abhängigkeitseigenschaft sein.
Quelleneigenschaft Der Name einer anderen Abhängigkeitseigenschaft, die für den vorlagebasierten Typ vorhanden ist.

Bemerkungen

Die Verwendung von TemplateBinding ist ein grundlegender Bestandteil bei der Definition einer Steuerelementvorlage, sei es, wenn Sie ein benutzerdefiniertes Steuerelement erstellen oder eine Steuerelementvorlage für vorhandene Steuerelemente ersetzen möchten. Weitere Informationen finden Sie unter Schnellstart: Steuerelementvorlagen.

Es ist ziemlich üblich, dass propertyName- und targetProperty- denselben Eigenschaftsnamen verwenden. 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 könnte ein Steuerelement, das einen TextBlock- in sein Kompositing integriert, der dazu verwendet wird, die eigene Text--Eigenschaft des Steuerelements anzuzeigen, diesen XAML-Code als Teil der Steuerelementvorlage einschließen: <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 TemplateBindingverwenden. Fehler treten auf, wenn Werte beim Analysieren des XAML-Codes nicht übereinstimmen. Wenn Sie einen Konverter benötigen, können Sie die detaillierte Schreibweise für eine Vorlagenbindung, wie zum Beispiel {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}, verwenden.

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 in Form von einer anderen Bindung verzögert wird. Die Auswertung für TemplateBinding- kann warten, bis alle erforderlichen Laufzeitbindungen Werte aufweisen.

Eine TemplateBinding- ist immer eine unidirektionale Bindung. Beide beteiligten Eigenschaften müssen Abhängigkeitseigenschaften sein.

TemplateBinding ist eine Markup-Erweiterung. Markuperweiterungen werden typischerweise implementiert, wenn Attributwerte von den reinen Literalwerten oder Handlernamen abweichen müssen und diese Anforderung globaler ist, als nur Typkonverter für bestimmte Typen oder Eigenschaften zu verwenden. 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 XAML-Prozessor-Implementierung der Windows-Runtime gibt es keine Darstellung einer Unterstützungsklasse 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 einem ControlTemplate erfordert Windows 10, Version 1809 (SDK 17763) oder höher. Weitere Informationen zu Zielversionen, finden Sie unter versionsadaptiven Code.

Beginnend mit Windows 10, Version 1809, können Sie die x:Bind Markuperweiterung an jeder Stelle verwenden, wo Sie TemplateBinding in einer ControlTemplateverwenden.

Die TargetType-Eigenschaft ist für ControlTemplate erforderlich, wenn x:Bindverwendet wird.

Mit x:Bind Unterstützung können Sie sowohl Funktionsbindungen als auch bidirektionale Bindungen innerhalb einer ControlTemplate-verwenden.

In diesem Beispiel wird die TextBlock.Text-eigenschaft zu Button.Content.ToStringausgewertet. Der TargetType der ControlTemplate fungiert als Datenquelle und erzielt dasselbe Ergebnis wie eine TemplateBinding-Verbindung zum übergeordneten Element.

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