RelativeSource-Markuperweiterung

Applies to Windows and Windows Phone

Stellt eine Methode bereit, um die Quelle einer Bindung als relative Beziehung im Laufzeitobjektdiagramm anzugeben.

Verwendung von XAML-Attributen (Self-Modus)

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

Verwendung von XAML-Attributen (TemplatedParent-Modus)

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

XAML-Werte

BenennungBeschreibung

{RelativeSource Self}

Erzeugt eine RelativeSource mit dem Mode-Wert Self. Das Zielelement sollte als Quelle für diese Bindung verwendet werden. Dies ist nützlich, wenn eine Eigenschaft eines Elements an eine andere Eigenschaft im gleichen Element gebunden werden soll.

{RelativeSource TemplatedParent}

Erzeugt eine RelativeSource mit dem Mode-Wert TemplatedParent. Das Steuerelement, auf das eine ControlTemplate angewendet wird, ist die Quelle für diese Bindung. Dies ist nützlich, wenn Laufzeitinformationen in Bindungen auf Vorlagenebene angewendet werden sollen.

 

Hinweise

Mit einer Binding kann Binding.RelativeSource entweder als Attribut für ein Binding-Objektelement oder als Komponente in einer Binding markup extension festgelegt werden. Aus diesem Grund werden zwei verschiedene Varianten der XAML-Syntax dargestellt.

RelativeSource ähnelt Binding insofern, als es sich um eine Markuperweiterung handelt, die Instanzen von sich selbst zurückgeben kann und die eine zeichenfolgenbasierte Konstruktion unterstützt, die hauptsächlich ein Argument an den Konstruktor übergibt. In diesem Fall ist das Argument, das übergeben wird, der Mode-Wert.

Der Self-Modus ist in Fällen nützlich, in denen das gleiche Element als Quellobjekt und Zielobjekt für eine Bindung verwendet werden soll, Quelle und Ziel jedoch unterschiedliche Eigenschaften sind. Dies ist nützlich, wenn eine Eigenschaft eines Elements an eine andere Eigenschaft im gleichen Element gebunden werden soll. Das stellt zudem eine Variation der ElementName-Bindung dar, die kein Benennen des Elements und anschließendes Verweisen des Elements auf sich selbst erfordert. 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. 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.

Hier sehen Sie ein Beispiel. Dieses Rectangle verwendet eine Binding, damit seine Height und Width immer gleich sind und eine Darstellung als Quadrat erfolgt. Nur die Höhe wird als fester Wert festgelegt. Für dieses Rectangle ist die DataContext-Standardeigenschaft null, nicht this. Daher verwenden wir das RelativeSource={RelativeSource Self}-Argument in der Binding-Verwendung, um die Datenkontextquelle als Objekt selbst festzulegen (und die Bindung an ihre anderen Eigenschaften zu ermöglichen)


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

Eine weitere nützliche Technik ist die Verwendung von RelativeSource={RelativeSource Self} zum Festlegen der DataContext-Eigenschaft eines Objekts auf sich selbst, wobei die Page-Klasse mit einer benutzerdefinierten Eigenschaft erweitert wurde, die bereits ein sofort einsatzfähiges Ansichtsmodell für ihre eigene Datenbindung bereitstellt. Diese Methode sehen Sie in einigen der SDK-Beispielen: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Hinweis  Die Verwendung von RelativeSource in XAML zeigt nur die beabsichtigte Verwendung: das Festlegen eines Werts für Binding.RelativeSource in XAML als Teil eines Bindungsausdrucks. Theoretisch sind andere Verwendungen möglich, wenn Sie eine Eigenschaft mit einem Wert RelativeSource festlegen.

Verwandte Themen

Übersicht über XAML
Übersicht Datenbindung
Binding markup extension
Binding
RelativeSource

 

 

Anzeigen:
© 2015 Microsoft