{RelativeSource}-Markuperweiterung
Stellt eine Möglichkeit bereit, die Quelle einer Bindung in Bezug auf eine relative Beziehung im Laufzeitobjektdiagramm anzugeben.
XAML-Attributverwendung (Self Mode)
<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>
XAML-Attributverwendung (TemplatedParent-Modus)
<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>
XAML-Werte
Begriff | Beschreibung |
---|---|
{RelativeSource Self} | Erzeugt einen Moduswert von Selbst. Das Zielelement sollte als Quelle für diese Bindung verwendet werden. Dies ist nützlich, um eine Eigenschaft eines Elements an eine andere Eigenschaft für dasselbe Element zu binden. |
{RelativeSource TemplatedParent} | Erzeugt eine ControlTemplate , die als Quelle für diese Bindung angewendet wird. Dies ist nützlich, um Laufzeitinformationen auf Vorlagenebene auf Bindungen anzuwenden. |
Hinweise
Eine Bindung kann Binding.RelativeSource entweder als Attribut für ein Binding-Objektelement oder als Komponente innerhalb einer {Binding}-Markuperweiterung festlegen. Aus diesem Grund werden zwei verschiedene XAML-Syntaxen angezeigt.
RelativeSource ähnelt der {Binding}-Markuperweiterung. Es handelt sich um eine Markuperweiterung, die Instanzen von sich selbst zurückgeben und eine zeichenfolgenbasierte Konstruktion unterstützt, die im Wesentlichen ein Argument an den Konstruktor übergibt. In diesem Fall ist das übergebene Argument der Wert "Mode" .
Der Self-Modus eignet sich zum Binden einer Eigenschaft eines Elements an eine andere Eigenschaft für dasselbe Element und ist eine Variation der ElementName-Bindung , erfordert jedoch keine Benennung und dann selbstverweisend für das Element. Wenn Sie eine Eigenschaft eines Elements an eine andere Eigenschaft für dasselbe Element binden, müssen die Eigenschaften entweder denselben Eigenschaftstyp verwenden, oder Sie müssen auch einen Konverter für die Bindung verwenden, um die Werte zu konvertieren. Sie können beispielsweise Height als Quelle für Breite ohne Konvertierung verwenden, aber Sie benötigen einen Konverter, um IsEnabled als Quelle für Visibility zu verwenden.
Im Folgenden sehen Sie ein Beispiel. Dieses Rechteck verwendet eine {Binding}-Markuperweiterung, sodass die Höhe und Breite immer gleich sind und als Quadrat gerendert wird. Nur die Höhe wird als fester Wert festgelegt. Für dieses Rechteck ist der Standardmäßige DataContext null, nicht dies. Um die Datenquelle so einzurichten, dass es sich um das Objekt selbst (und die Bindung an seine anderen Eigenschaften) handeln soll, verwenden wir das RelativeSource={RelativeSource Self}
Argument in der Verwendung der {Binding}-Markuperweiterung.
<Rectangle
Fill="Orange" Width="200"
Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>
Eine weitere Verwendung RelativeSource={RelativeSource Self}
ist eine Möglichkeit, den DataContext eines Objekts auf sich selbst festzulegen. Diese Technik wird beispielsweise in einigen SDK-Beispielen angezeigt, in denen die Page-Klasse mit einer benutzerdefinierten Eigenschaft erweitert wurde, die bereits ein einsatzbereites Ansichtsmodell für die eigene Datenbindung bereitstellt, z. B.: <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: Festlegen eines Werts für Binding.RelativeSource in XAML als Teil eines Bindungsausdrucks. Theoretisch sind andere Verwendungen möglich, wenn sie eine Eigenschaft festlegen, bei der der Wert "RelativeSource" ist.