RelativeSource MarkupExtension
Určuje vlastnosti zdroje RelativeSource jako vazby, které mají být použity v rámci Binding Markup Extension, nebo při nastavování vlastnosti RelativeSource elementu Binding vytvořeného v XAML.
Použití atributu XAML
<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />
Použití atributů XAML (vnořené do rozšíření Binding)
<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />
Použití elementu objektu XAML
<Binding>
<Binding.RelativeSource>
<RelativeSource Mode="modeEnumValue"/>
</Binding.RelativeSource>
</Binding>
-nebo-
<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
/>
</Binding.RelativeSource>
</Binding>
Hodnoty XAML
Hodnota | Popis |
---|---|
modeEnumValue |
Jedna z následujících možností: - Řetězcový token Self odpovídá RelativeSource, které bylo vytvořeno s vlastností Mode nastavenou na Self.- Řetězcový token TemplatedParent ; odpovídá RelativeSource vytvořenému, kde jeho vlastnost Mode je nastavena na TemplatedParent.- Řetězcový token PreviousData odpovídá RelativeSource vytvořenému s jeho vlastností Mode nastavenou na PreviousData.- Informace o FindAncestor režimu najdete níže. |
FindAncestor |
Řetězcový token FindAncestor . Použití tohoto tokenu přejde do režimu, kdy RelativeSource určuje nadřazený typ a volitelně nadřazenou úroveň. To odpovídá RelativeSource, které bylo vytvořeno s její vlastností Mode nastavenou na FindAncestor. |
typeName |
Vyžaduje se pro režim FindAncestor . Název typu, který vyplňuje vlastnost AncestorType. |
intLevel |
Volitelné pro režim FindAncestor . Nadřazená úroveň (vyhodnocená směrem k nadřazenému směru v logickém stromu) |
Poznámky
{RelativeSource TemplatedParent}
použití vazeb jsou klíčovou technikou, která řeší větší koncept oddělení uživatelského rozhraní ovládacího prvku a logiky ovládacího prvku. To umožňuje vazbu z definice šablony na nadřazený objekt (instanci objektu runtime, ve které je šablona použita). V tomto případě je rozšíření TemplateBinding Markup ve skutečnosti zkratkou pro následující vazbový výraz: {Binding RelativeSource={RelativeSource TemplatedParent}}
.
TemplateBinding
nebo {RelativeSource TemplatedParent}
použití jsou relevantní pouze v rámci XAML, který definuje šablonu. Další informace naleznete v tématu TemplateBinding Markup Extension.
{RelativeSource FindAncestor}
se používá v šablonách ovládacích prvků nebo v předvídatelných samostatných kompozicích uživatelského rozhraní, v případech, kdy se očekává, že prvek ovládání bude vždy ve vizuálním stromu určitého nadřazeného typu. Například položky ovládacího prvku můžou používat vazebné vzory FindAncestor
pro připojení k vlastnostem jejich nadřazeného prvku. Nebo prvky, které jsou součástí kompozice řízení v šabloně, mohou použít FindAncestor
vazby k nadřazeným prvkům ve stejné struktuře kompozice.
V syntaxi elementu objektu pro FindAncestor
režim zobrazený v oddílech Syntaxe XAML se druhá syntaxe elementu objektu používá speciálně pro FindAncestor
režim.
FindAncestor
režim vyžaduje hodnotu AncestorType. Je nutné nastavit AncestorType jako atribut pomocí rozšíření x:Type Markup Extension odkaz na typ nadřazeného objektu, který chcete vyhledat. Hodnota AncestorType se používá při zpracování požadavku vazby během běhu programu.
V módu FindAncestor
může volitelná vlastnost AncestorLevel pomoci s objasněním vyhledávání předků v případech, kdy ve stromě prvků existuje možná více než jeden prvek tohoto typu.
Další informace o použití režimu FindAncestor
naleznete v tématu RelativeSource.
{RelativeSource Self}
je užitečná ve scénářích, kdy má jedna vlastnost instance záviset na hodnotě jiné vlastnosti téže instance, a mezi těmito dvěma vlastnostmi neexistuje žádný obecný vztah závislosti (například donucení). I když je vzácné, že na objektu existují dvě vlastnosti tak, že hodnoty jsou doslova identické (a stejně typované), můžete také použít parametr Converter
na vazbu, která má {RelativeSource Self}
, a použít převaděč k převodu mezi zdrojovými a cílovými typy. Další scénář pro {RelativeSource Self}
je součástí MultiDataTrigger.
Například následující XAML definuje Rectangle prvek tak, aby bez ohledu na hodnotu zadaná pro Width, Rectangle je vždy čtverec: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>
{RelativeSource PreviousData}
je užitečná buď v šablonách dat, nebo v případech, kdy vazby používají kolekci jako zdroj dat. Pomocí {RelativeSource PreviousData}
můžete zvýraznit vztahy mezi sousedními datovými položkami v kolekci. Související technika spočívá v vytvoření MultiBinding mezi aktuálními a předchozími položkami ve zdroji dat a pomocí převaděče na této vazbě určit rozdíl mezi těmito dvěma položkami a jejich vlastnostmi.
V následujícím příkladu první TextBlock v šabloně položek zobrazí aktuální číslo. Druhá vazba TextBlock je MultiBinding, která má jmenovitě dvě Binding prvky: aktuální záznam a vazbu, která záměrně používá předchozí datový záznam pomocí {RelativeSource PreviousData}
. Pak převodník na MultiBinding vypočítá rozdíl a vrátí ho zpět k propojení.
<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>
Popis datové vazby jako konceptu zde není popsaný, viz Přehled datových vazeb.
V implementaci procesoru WPF XAML je zpracování tohoto značkovacího rozšíření definováno třídou RelativeSource.
RelativeSource
je rozšíření značek. Rozšíření značek se obvykle implementují, pokud existuje požadavek, aby hodnota atributů byla odlišná od literálních hodnot nebo názvů funkcí zpracování, a tento požadavek je širší než pouhé používání převodníků typů pro konkrétní typy nebo vlastnosti. Všechna rozšíření značek v XAML používají {
a }
znaky v syntaxi atributu, což je konvence, kterou procesor XAML rozpozná, že rozšíření značek musí zpracovat atribut. Další informace naleznete v tématu Rozšíření značek a WPF XAML.
Viz také
.NET Desktop feedback