RelativeSource MarkupExtension
Určuje vlastnosti zdroje vazby RelativeSource , které se mají použít v rámci Binding Markup Extension nebo při nastavení RelativeSource vlastnosti Binding elementu vytvořeného v XAML.
Použití atributu XAML
<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />
Použití atributu XAML (vnořeného 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 |
Jeden z následujících: - Token řetězce Self ; odpovídá vytvořenému RelativeSource s jeho Mode vlastností nastavenou na Self.- Token řetězce TemplatedParent ; odpovídá vytvořenému RelativeSource s jeho Mode vlastností nastavenou na TemplatedParent.- Token řetězce PreviousData ; odpovídá vytvořenému RelativeSource s jeho Mode vlastností nastavenou na PreviousData.- Informace o FindAncestor režimu najdete níže. |
FindAncestor |
Token řetězce FindAncestor . Použití tohoto tokenu přejde do režimu, ve kterém RelativeSource určuje typ nadřazeného objektu a volitelně nadřazenou úroveň. To odpovídá objektu vytvořenému RelativeSource s jeho Mode vlastností nastavenou na FindAncestor. |
typeName |
Vyžaduje se pro FindAncestor režim. Název typu, který vyplní AncestorType vlastnost. |
intLevel |
Volitelné pro FindAncestor režim. Úroveň předchůdce (vyhodnocována ve směru nadřazeného uzlu v logickém stromu) |
Poznámky
{RelativeSource TemplatedParent}
Použití vazby 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 vytvořit vazbu z definice šablony na nadřazený objekt vytvořený pomocí šablony (instanci objektu vytvořenou za běhu, pro niž je šablona použita). V tomto případě je Rozšíření značek TemplateBinding 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á hlavně v šablonách ovládacích prvků nebo předvídatelných samostatných složeních uživatelského rozhraní, v případech, kdy se vždy očekává, že ovládací prvek bude ve vizuálním stromu určitého nadřazeného typu. Například položky ovládacího prvku položek můžou používat FindAncestor
použití k vytvoření vazby na vlastnosti jejich položek nadřazeného nadřazeného prvku. Nebo prvky, které jsou součástí ovládacího složení v šabloně, mohou použít FindAncestor
vazby k nadřazeným prvkům ve stejné struktuře složení.
V syntaxi elementu objektu pro FindAncestor
režim zobrazený v částech Syntaxe XAML se druhá syntaxe elementu objektu používá speciálně pro FindAncestor
režim. FindAncestor
režim vyžaduje AncestorType hodnotu. Musíte nastavit AncestorType jako atribut pomocí odkazu x:Type Markup Extension na typ nadřazeného objektu, který chcete vyhledat. Hodnota AncestorType se používá při zpracování požadavku vazby za běhu.
Pro FindAncestor
režim může volitelná vlastnost AncestorLevel pomoct nejednoznačné vyhledávání nadřazeného objektu v případech, kdy existuje více než jeden nadřazený typ existující ve stromu prvků.
Další informace o tom, jak používat FindAncestor
režim, naleznete v tématu RelativeSource.
{RelativeSource Self}
je užitečná ve scénářích, kdy by jedna vlastnost instance měla záviset na hodnotě jiné vlastnosti stejné instance a mezi těmito dvěma vlastnostmi již neexistuje žádný obecný vztah vlastnosti závislosti (například převod). I když existují dvě vlastnosti objektu tak, že hodnoty jsou doslova identické (a jsou identické), můžete také použít Converter
parametr na vazbu, která obsahuje {RelativeSource Self}
, a použít převaděč k převodu mezi zdrojovými a cílovými typy. Dalším scénářem {RelativeSource Self}
MultiDataTriggerje , že je součástí .
Například následující XAML definuje Rectangle prvek tak, aby bez ohledu na to, jaká hodnota je zadána 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í této kolekce můžete {RelativeSource PreviousData}
zvýraznit vztahy mezi sousedními datovými položkami. Související technika spočívá v vytvoření MultiBinding mezi aktuální a předchozí položky ve zdroji dat a použití převaděče na této vazbě k určení rozdílu mezi těmito dvěma položkami a jejich vlastnostmi.
V následujícím příkladu zobrazí první TextBlock v šabloně položek aktuální číslo. Druhá TextBlock vazba je MultiBinding ten, který má jmenovitě dvě Binding složky: aktuální záznam a vazbu, která záměrně používá předchozí datový záznam pomocí {RelativeSource PreviousData}
. Pak převaděč na MultiBinding výpočtu rozdílu a vrátí ho do vazby.
<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 rozšíření značek definováno RelativeSource třídou.
RelativeSource
je rozšíření značek. Rozšíření značek jsou obvykle implementována v případě požadavku, aby díky použití řídicí sekvence mohly být hodnoty atributů něčím jiným než literálními hodnotami nebo názvy obslužných rutin, a tento požadavek má tak rozsáhlou platnost, že nestačí jednoduše použít převaděče typů pro určité typy nebo vlastnosti. Všechna rozšíření značek v XAML používají {
}
znaky v syntaxi atributu, což je konvence, kterou procesor XAML rozpozná, že rozšíření značek musí atribut zpracovat. Další informace naleznete v tématu Rozšíření značek a WPF XAML.
Viz také
.NET Desktop feedback