{RelativeSource}-Markuperweiterung{RelativeSource} markup extension

Stellt eine Methode bereit, um die Quelle einer Bindung als relative Beziehung im Laufzeitobjektdiagramm anzugeben.Provides a means to specify the source of a binding in terms of a relative relationship in the run-time object graph.

Verwendung von XAML-Attributen (Self-Modus)XAML attribute usage (Self mode)

<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

Verwendung von XAML-Attributen (TemplatedParent-Modus)XAML attribute usage (TemplatedParent mode)

<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

XAML-WerteXAML values

BegriffTerm BESCHREIBUNGDescription
{RelativeSource Self}{RelativeSource Self} Erzeugt den Mode-Wert Self.Produces a Mode value of Self. Das Zielelement sollte als Quelle für diese Bindung verwendet werden.The target element should be used as the source for this binding. Dies ist nützlich, wenn eine Eigenschaft eines Elements an eine andere Eigenschaft im gleichen Element gebunden werden soll.This is useful for binding one property of an element to another property on the same element.
{RelativeSource TemplatedParent}{RelativeSource TemplatedParent} Erzeugt eine ControlTemplate, die als Quelle für diese Bindung angewendet wird.Produces a ControlTemplate that is applied as the source for this binding. Dies ist nützlich, wenn Laufzeitinformationen in Bindungen auf Vorlagenebene angewendet werden sollen.This is useful for applying runtime information to bindings at the template level.  

BemerkungenRemarks

Mit einer Bindung kann Binding.RelativeSource entweder als Attribut für ein Binding-Objektelement oder als Komponente in einer {Binding}-Markuperweiterung festgelegt werden.A Binding can set Binding.RelativeSource either as an attribute on a Binding object element or as a component within a {Binding} markup extension. Aus diesem Grund werden zwei verschiedene Varianten der XAML-Syntax dargestellt.This is why two different XAML syntaxes are shown.

RelativeSource ähnelt der {Binding}-Markuperweiterung.RelativeSource is similar to {Binding} markup extension. Hierbei handelt es sich um eine Markuperweiterung, die Instanzen selbstständig zurückgeben kann und die eine zeichenfolgenbasierte Konstruktion unterstützt, die im Wesentlichen ein Argument an den Konstruktor übergibt.It is a markup extension that is capable of returning instances of itself, and supporting a string-based construction that essentially passes an argument to the constructor. In diesem Fall ist das Argument, das übergeben wird, der Mode-Wert.In this case, the argument being passed is the Mode value.

Der Self-Modus ist nützlich, wenn eine Eigenschaft eines Elements an eine andere Eigenschaft im gleichen Element gebunden werden soll. Dies stellt außerdem eine Variation der ElementName-Bindung dar, erfordert aber keine Benennung und keinen anschließenden Selbstverweis des Elements.The Self mode is useful for binding one property of an element to another property on the same element, and is a variation on ElementName binding but does not require naming and then self-referencing the element. Wenn Sie eine Eigenschaft eines Elements an eine andere Eigenschaft im gleichen Element binden, müssen die Eigenschaften den gleichen Eigenschaftentyp ausweisen. Andernfalls müssen Sie auch einen Converter für die Bindung verwenden, um die Werte zu konvertieren.If you bind one property of an element to another property on the same element, either the properties must use the same property type, or you must also use a Converter on the binding to convert the values. Sie können beispielsweise Height als Quelle für Width ohne Konvertierung verwenden. Sie benötigen jedoch einen Konverter, um IsEnabled als Quelle für Visibility zu nutzen.For example, you could use Height as a source for Width without conversion, but you'd need a converter to use IsEnabled as a source for Visibility.

Hier sehen Sie ein Beispiel.Here's an example. Dieses Rechteck verwendet eine {Binding}-Markuperweiterung, damit Height und Width immer gleich sind und eine Darstellung als Quadrat erfolgt.This Rectangle uses a {Binding} markup extension so that its Height and Width are always equal and it renders as a square. Nur die Höhe wird als fester Wert festgelegt.Only the Height is set as a fixed value. Der standardmäßige DataContext dieses Rechtecks ist null anstelle von this.For this Rectangle its default DataContext is null, not this. Daher verwenden wir das RelativeSource={RelativeSource Self}-Argument in der Syntax der {Binding}-Markuperweiterung, um die Datenkontextquelle auf das eigentliche Objekt festzulegen (und die Bindung an ihre anderen Eigenschaften zu ermöglichen).So to establish the data context source to be the object itself (and enable binding to its other properties) we use the RelativeSource={RelativeSource Self} argument in the {Binding} markup extension usage.

<Rectangle
  Fill="Orange" Width="200"
  Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>

Darüber hinaus kann RelativeSource={RelativeSource Self} auch verwendet werden, um den DataContext eines Objekts auf sich selbst festzulegen.Another use of RelativeSource={RelativeSource Self} is as a way to set an object's DataContext to itself. Beispielsweise können Sie dieses Verfahren in einigen der SDK-Beispiele sehen, in denen die Page -Klasse mit einer benutzerdefinierten Eigenschaft erweitert wurde, die bereits ein fertiges Ansichts Modell für die eigene Datenbindung bereitstellt, z. b.: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">For example, you may see this technique in some of the SDK examples where the Page class has been extended with a custom property that's already providing a ready-to-go view model for its own data binding such as: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Hinweis    Die XAML-Verwendung für RelativeSource zeigt nur die Verwendung an, für die Sie vorgesehen ist: das Festlegen eines Werts für " Binding. RelativeSource " in XAML als Teil eines Bindungs Ausdrucks.Note  The XAML usage for RelativeSource shows only the usage for which it is intended: setting a value for Binding.RelativeSource in XAML as part of a binding expression. Theoretisch sind andere Verwendungen möglich, wenn Sie eine Eigenschaft mit einem RelativeSource-Wert festlegen.Theoretically, other usages are possible if setting a property where the value is RelativeSource.