RelativeSource jelöléskiterjesztés

Egy RelativeSource kötésforrás tulajdonságait adja meg, amelyeket egy Kötési korrektúrakiterjesztés, vagy egy XAML-ben létrehozott RelativeSource elem Binding tulajdonságának beállításakor kell használni.

XAML-attribútumok használata

<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />

XAML attribútumhasználat (a Kötés bővítménybe ágyazva)

<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />

XAML objektumelem-használat

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>

-vagy-

<Binding>
  <Binding.RelativeSource>
    <RelativeSource
      Mode="FindAncestor"
      AncestorType="{x:Type typeName}"
      AncestorLevel="intLevel"
    />
  </Binding.RelativeSource>
</Binding>

XAML-értékek

Érték Leírás
modeEnumValue Az alábbiak egyike:

- A Selfsztring token egy RelativeSource-nek felel meg, amely a Mode tulajdonságát Selfértékre lett állítva.
- A TemplatedParentsztring token egy RelativeSource-nek felel meg, amely a Mode tulajdonságát TemplatedParentértékre lett állítva.
- A PreviousDatasztring token egy RelativeSource-nek felel meg, amely a Mode tulajdonságát PreviousDataértékre lett állítva.
– Az FindAncestor módról az alábbiakban olvashat bővebben.
FindAncestor A string token FindAncestor. Ennek a tokennek a használata olyan módba lép, amelyben egy RelativeSource meghatározza egy elődtípust és opcionálisan egy ős szintet. Ez megfelel egy RelativeSource-nak, amelynek a Mode tulajdonsága FindAncestorértékre van beállítva.
typeName FindAncestor módhoz szükséges. Egy típus neve, amely kitölti a AncestorType tulajdonságot.
intLevel A FindAncestor módhoz nem kötelező. Elődszint (a logikai fa szülőiránya felé értékelve).

Megjegyzések

{RelativeSource TemplatedParent} kötések olyan kulcsfontosságú technikák, amelyek a vezérlő felhasználói felületének és a vezérlő logikájának elválasztásának nagyobb fogalmával foglalkoznak. Ez lehetővé teszi a sablondefiníción belüli kötést a sablon szülőjéhez (a sablont alkalmazó futásidejű objektumpéldányhoz). Ebben az esetben a TemplateBinding Markup Extension valójában a következő kötési kifejezés rövidítése: {Binding RelativeSource={RelativeSource TemplatedParent}}. TemplateBinding vagy {RelativeSource TemplatedParent} használat csak a sablont definiáló XAML-ben releváns. További információért lásd: TemplateBinding Markup Extension.

{RelativeSource FindAncestor} főként vezérlősablonokban vagy kiszámítható, önálló felhasználói felületi kompozíciókban használják, olyan esetekben, amikor a vezérlőknek mindig egy bizonyos elődtípusú vizualizációs fában kell lenniük. Például egy elemvezérlő elemei FindAncestor adatközlést használhatnak, hogy az elemvezérlő szülő ősének tulajdonságaihoz kapcsolódjanak. Vagy a sablon vezérlőelem-összetételének részét képező elemek FindAncestor kötéseket használhatnak a szülőelemekhez ugyanabban az összeállítási struktúrában.

Az XAML szintaxis szakaszaiban a FindAncestor mód objektumelem-szintaxisában a második objektumelem használata kifejezetten a FindAncestor módhoz használatos. FindAncestor módhoz AncestorType érték szükséges. A AncestorType attribútumot úgy kell beállítania, hogy egy x:Type Markup Extension hivatkozást használ az előd keresett típusára. A AncestorType értéket akkor használja a rendszer, ha a kötési kérelmet futásidőben dolgozzák fel.

FindAncestor mód esetén az opcionális AncestorLevel tulajdonság segíthet tisztázni az elődkeresést olyan esetekben, amikor az elemfán egynél több ilyen típusú előd található.

A FindAncestor mód használatáról további információt a RelativeSourcecímű témakörben talál.

{RelativeSource Self} olyan helyzetekben hasznos, amikor egy példány egyik tulajdonságának ugyanannak a példánynak egy másik tulajdonságától kell függenie, és a két tulajdonság között már nincs általános függőségi tulajdonságkapcsolat (például kényszerítés). Bár ritka, hogy egy objektumon létezzen két olyan tulajdonság, ahol az értékek szó szerint és típustekintetben is azonosak, alkalmazhat Converter paramétert egy {RelativeSource Self}-t tartalmazó kötésre, és a konverter segítségével konvertálhat a forrás- és céltípusok között. A {RelativeSource Self} másik lehetséges forgatókönyve mint egy MultiDataTriggerrésze.

A következő XAML például egy Rectangle elemet határoz meg úgy, hogy függetlenül attól, milyen értéket ad meg Width, a Rectangle mindig négyzet: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>

{RelativeSource PreviousData} adatsablonokban vagy olyan esetekben hasznos, amikor a kötések gyűjteményt használnak adatforrásként. A {RelativeSource PreviousData} használatával kiemelheti a gyűjtemény szomszédos adatelemei közötti kapcsolatokat. A kapcsolódó technika, hogy létrehozunk egy MultiBinding-t az adatforrás aktuális és előző elemei között, majd egy konvertert használunk a kötésen, hogy meghatározzuk a két elem és tulajdonságaik közötti különbséget.

Az alábbi példában az elemek sablonjának első TextBlock az aktuális számot jeleníti meg. A második TextBlock kötés egy MultiBinding, amely névlegesen két Binding összetevővel rendelkezik: az aktuális rekord, valamint egy olyan kötés, amely szándékosan használja az előző adatrekordot {RelativeSource PreviousData}használatával. Ezután a MultiBinding konverter kiszámítja a különbséget, és visszaadja a kötésnek.

<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>

Az adatkötés fogalmaként való leírásáról itt nem olvashat, lásd adatkötések áttekintését.

A WPF XAML processzor implementációjában a jelölőbővítmény kezelését a RelativeSource osztály határozza meg.

RelativeSource egy korrektúrakiterjesztés. Jelölőkiterjesztéseket általában akkor alkalmaznak, amikor szükség van arra, hogy az attribútumértékek ne csak konstans értékek vagy kezelőnevek legyenek, és a követelmény globálisabb, mint bizonyos típusok vagy tulajdonságok esetében a típuskonverterek használata. Az XAML-ben minden korrektúrakiterjesztés az attribútumszintaxis { és } karaktereit használja, ez az a konvenció, amellyel az XAML-processzor felismeri, hogy a korrektúrakiterjesztésnek fel kell dolgoznia az attribútumot. További információ: Korrektúrakiterjesztések és WPF XAML.

Lásd még