Dela via


{RelativeSource} markeringstillägg

Tillhandahåller ett sätt att ange källan för en bindning i termer av en relativ relation i körningsobjektdiagrammet.

XAML-attributanvändning (självläge)

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

XAML-attributanvändning (TemplatedParent-läge)

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

XAML-värden

Begrepp Description
{RelativeSource Self} Genererar ett lägesvärde för Self. Målelementet ska användas som källa för den här bindningen. Detta är användbart för att binda en egenskap för ett element till en annan egenskap i samma element.
{RelativeSource TemplatedParent} Skapar ett ControlTemplate som används som källa för den här bindningen. Detta är användbart för att tillämpa körningsinformation på bindningar på mallnivå.

Anmärkningar

En bindning kan ange Binding.RelativeSource som ett attribut för ett bindningsobjektelement eller som en komponent i ett {Binding}-markeringstillägg. Därför visas två olika XAML-syntaxer.

RelativeSource liknar {Binding}-markeringstillägget. Det är ett markup-tillägg som kan returnera instanser av sig självt och stöder en strängbaserad konstruktion som i huvudsak skickar ett argument till konstruktorn. I det här fallet är argumentet som skickas värdet Mode.

Självläget är användbart för att binda en egenskap för ett element till en annan egenskap i samma element och är en variant av ElementName-bindning men kräver inte namngivning och refererar sedan själv till elementet. Om du binder en egenskap för ett element till en annan egenskap för samma element måste egenskaperna antingen använda samma egenskapstyp, eller också måste du använda en konverterare på bindningen för att konvertera värdena. Du kan till exempel använda Höjd som källa för Bredd utan konvertering, men du behöver en konverterare för att använda IsEnabled som källa för synlighet.

Här följer ett exempel. Den här rektangeln använder markeringstillägget {Binding} så att dess höjd och bredd alltid är lika och återges som en kvadrat. Endast höjd anges som ett fast värde. För den här rektangeln är standarddatacontextennull, inte detta. För att upprätta datakontextkällan som själva objektet (och aktivera bindning till dess andra egenskaper) använder RelativeSource={RelativeSource Self} vi argumentet i användningen av {Binding}-markeringstillägget.

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

En annan användning av RelativeSource={RelativeSource Self} är som ett sätt att ange ett objekts DataContext till sig själv. Du kan till exempel se den här tekniken i några av SDK-exemplen där Page-klassen har utökats med en anpassad egenskap som redan tillhandahåller en redo-att-användas vymodell för sin egen databindning, till exempel: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Not XAML-användningen för RelativeSource visar endast den användning som den är avsedd för: att ange ett värde för Binding.RelativeSource i XAML som en del av ett bindningsuttryck. Teoretiskt sett är andra användningar möjliga om du anger en egenskap där värdet är RelativeSource.