Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Hiermee geeft u eigenschappen op van een RelativeSource bindingsbron, die moet worden gebruikt binnen een bindingsmarkeringsextensie, of bij het instellen van de RelativeSource eigenschap van een Binding-element dat is ingesteld in XAML.
XAML-kenmerkgebruik
<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />
XAML-kenmerkgebruik (genesteld binnen Binding-extensie)
<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />
Gebruik van XAML-objectelementen
<Binding>
<Binding.RelativeSource>
<RelativeSource Mode="modeEnumValue"/>
</Binding.RelativeSource>
</Binding>
– of –
<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
/>
</Binding.RelativeSource>
</Binding>
XAML-waarden
| Waarde | Beschrijving |
|---|---|
modeEnumValue |
Een van de volgende: - Het token Self; komt overeen met een RelativeSource zoals gecreëerd met zijn Mode-eigenschap ingesteld op Self.- Het token TemplatedParent; komt overeen met een RelativeSource zoals gecreëerd met zijn Mode-eigenschap ingesteld op TemplatedParent.- Het token PreviousData; komt overeen met een RelativeSource zoals gecreëerd met zijn Mode-eigenschap ingesteld op PreviousData.- Zie hieronder voor meer informatie over FindAncestor modus. |
FindAncestor |
De stringtoken FindAncestor. Met dit token wordt een modus geactiveerd waarbij een RelativeSource een bovenliggend type en optioneel een bovenliggend niveau opgeeft. Dit komt overeen met een RelativeSource die is gemaakt met de eigenschap Mode ingesteld op FindAncestor. |
typeName |
Vereist voor FindAncestor modus. De naam van een type, waarmee de eigenschap AncestorType wordt ingevuld. |
intLevel |
Optioneel voor FindAncestor-modus. Een bovenliggend niveau (geëvalueerd in de richting van de ouder in de logische structuur). |
Opmerkingen
{RelativeSource TemplatedParent} bindingsgebruik is een belangrijke techniek waarmee een groter concept van de scheiding van de gebruikersinterface van een besturingselement en de logica van een besturingselement wordt aangepakt. Hierdoor kan binding vanuit de sjabloondefinitie worden ingesteld op het bovenliggende object van de sjabloon (het exemplaar van het runtimeobject waarop de sjabloon wordt toegepast). In dit geval is de TemplateBinding Markup Extension in feite een afkorting voor de volgende bindingexpressie: {Binding RelativeSource={RelativeSource TemplatedParent}}.
TemplateBinding of {RelativeSource TemplatedParent} gebruik zijn beide alleen relevant in de XAML die een sjabloon definieert. Zie TemplateBinding Markup Extensionvoor meer informatie.
{RelativeSource FindAncestor} wordt voornamelijk gebruikt in besturingssjablonen of voorspelbare zelfstandige UI-samenstellingen, voor gevallen waarin een besturingselement altijd verwacht wordt in een visuele structuur van een bepaald bovenliggend type. Items van een itemscontrole kunnen bijvoorbeeld FindAncestor gebruiken om te binden aan eigenschappen van hun bovenliggende ouder. Elementen die deel uitmaken van de samenstelling van besturingselementen in een sjabloon kunnen FindAncestor-bindingen leggen naar de bovenliggende elementen binnen dezelfde samenstellingsstructuur.
In de syntaxis van het objectelement voor FindAncestor modus die wordt weergegeven in de secties XAML-syntaxis, wordt de syntaxis van het tweede objectelement specifiek gebruikt voor FindAncestor modus. voor FindAncestor modus is een AncestorType-waarde vereist. U moet AncestorType instellen als een kenmerk met behulp van een x:Type Markeringsextensie verwijzing naar het type bovenliggende element waarnaar moet worden gezocht. De AncestorType-waarde wordt gebruikt wanneer de bindingsaanvraag tijdens de runtime wordt verwerkt.
Voor de FindAncestor mode kan de optionele eigenschap AncestorLevel helpen om de voorouderopzoeking te verduidelijken in gevallen waarin er mogelijk meer dan één voorouder van dat type bestaat in de elementenboom.
Zie FindAncestorvoor meer informatie over het gebruik van de RelativeSource modus.
{RelativeSource Self} is handig voor scenario's waarbij de ene eigenschap van een exemplaar afhankelijk moet zijn van de waarde van een andere eigenschap van hetzelfde exemplaar en er geen algemene relatie tussen afhankelijkheden (zoals dwang) bestaat tussen deze twee eigenschappen. Hoewel er zelden twee eigenschappen bestaan op een object, zodat de waarden letterlijk identiek zijn (en identiek zijn getypt), kunt u ook een Converter parameter toepassen op een binding met {RelativeSource Self}en het conversieprogramma gebruiken om te converteren tussen bron- en doeltypen. Een ander scenario voor {RelativeSource Self} is onderdeel van een MultiDataTrigger.
De volgende XAML definieert bijvoorbeeld een Rectangle element zodanig dat ongeacht welke waarde voor Widthwordt ingevoerd, de Rectangle altijd een vierkant is: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>
{RelativeSource PreviousData} is handig in gegevenssjablonen of in gevallen waarin bindingen een verzameling als gegevensbron gebruiken. U kunt {RelativeSource PreviousData} gebruiken om relaties tussen aangrenzende gegevensitems in de verzameling te markeren. Een gerelateerde techniek is het instellen van een MultiBinding tussen de huidige en vorige items in de gegevensbron en het gebruik van een conversieprogramma voor die binding om het verschil tussen de twee items en de bijbehorende eigenschappen te bepalen.
In het volgende voorbeeld wordt in het eerste TextBlock in de itemsjabloon het huidige getal weergegeven. De tweede TextBlock binding is een MultiBinding die nominaal twee Binding samenstellingen heeft: het huidige record en een binding die bewust gebruik maakt van de vorige gegevensrecord door gebruik te maken van {RelativeSource PreviousData}. Vervolgens berekent een conversieprogramma op de MultiBinding het verschil en retourneert het naar de binding.
<ListBox Name="fibolist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"/>
<TextBlock>, difference = </TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DiffConverter}">
<Binding/>
<Binding RelativeSource="{RelativeSource PreviousData}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Het beschrijven van gegevensbinding als concept wordt hier niet behandeld. Zie Overzicht van gegevensbinding.
In de WPF XAML-processor-implementatie wordt de verwerking voor deze markeringsextensie gedefinieerd door de RelativeSource-klasse.
RelativeSource is een markeringsextensie. Markeringsextensies worden doorgaans geïmplementeerd wanneer er een behoefte is om kenmerkwaarden anders in te stellen dan letterlijke waarden of handlernamen, en deze behoefte is breder dan alleen typeconverters toepassen op bepaalde typen of eigenschappen. Alle markeringsextensies in XAML gebruiken de { en } tekens in hun kenmerksyntaxis. Dit is de conventie waarmee een XAML-processor herkent dat een markeringsextensie het kenmerk moet verwerken. Zie Markup Extensions en WPF XAMLvoor meer informatie.
Zie ook
.NET Desktop feedback