Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Připojená vlastnost je koncept XAML. Připojené vlastnosti umožňují nastavit u objektu další páry vlastností a hodnot, ale vlastnosti nejsou součástí původní definice objektu. Připojené vlastnosti jsou obvykle definovány jako specializovaná forma závislé vlastnosti, která nemá obálku konvenční vlastnosti v modelu objektu typu vlastníka.
Předpoklady
Předpokládáme, že rozumíte základnímu konceptu vlastností závislostí a že jste si přečetli přehled vlastností závislostí.
Připojené vlastnosti v XAML
V XAML nastavíte připojené vlastnosti pomocí syntaxe AttachedPropertyProvider.PropertyName. Tady je příklad, jak můžete nastavit Canvas.Left v XAML.
<Canvas>
<Button Canvas.Left="50">Hello</Button>
</Canvas>
Poznámka:
Právě používáme Canvas.Left jako příklad připojené vlastnosti, aniž bychom plně vysvětlili, proč byste ji použili. Pokud se chcete dozvědět více o účelu Canvas.Left a o tom, jak Canvas zpracovává své podřízené prvky rozložení, přečtěte si referenční téma Canvas nebo Definujte rozložení pomocí XAML.
Proč používat připojené vlastnosti?
Připojené vlastnosti představují způsob, jak utéct konvence kódování, které by mohly zabránit tomu, aby různé objekty v relaci vzájemně předávaly informace za běhu. Je jistě možné umístit vlastnosti do společné základní třídy, aby každý objekt mohl jednoduše získat a nastavit vlastnost. Nakonec ale počet scénářů, kde byste to mohli chtít udělat, nafoukne vaše základní třídy sdílenými vlastnostmi. Může dokonce představovat případy, kdy se ze stovek potomků snaží využít vlastnost jen dva. Návrh třídy není dobře navržen. Aby se to vyřešilo, koncept připojené vlastnosti umožňuje objektu přiřadit hodnotu pro vlastnost, kterou její vlastní struktura třídy nedefinuje. Definující třída je schopna číst hodnotu z dceřiných objektů za běhu programu po vytvoření různých objektů v hierarchii objektů.
Podřízené prvky mohou například použít připojené vlastnosti k informování nadřazeného prvku o tom, jak se mají zobrazit v uživatelském rozhraní. Jedná se o případ s připojenou vlastností Canvas.Left . Canvas.Left je vytvořen jako připojená vlastnost, protože je nastavována na elementy obsažené v elementu Canvas, nikoli na samotném Canvas. Libovolný možný podřízený prvek pak použije Canvas.Left a Canvas.Top k určení posunutí v rámci nadřazeného kontejneru rozložení plátna Canvas. Připojené vlastnosti umožňují, aby to fungovalo bez zahlcení objektového modelu základního elementu množstvím vlastností, z nichž každá se vztahuje pouze na jeden z mnoha možných kontejnerů rozložení. Místo toho mnoho kontejnerů rozložení implementuje vlastní připojenou sadu vlastností.
Chcete-li implementovat připojenou vlastnost , třída Canvas definuje statické DependencyProperty pole s názvem Canvas.LeftProperty. Plátno pak poskytuje metody SetLeft a GetLeft jako veřejné přístupové objekty pro připojenou vlastnost, aby bylo možné povolit jak nastavení XAML, tak přístup k hodnotě za běhu. Pro XAML a systém vlastností závislostí tato sada rozhraní API splňuje vzor, který umožňuje konkrétní syntaxi XAML pro připojené vlastnosti a uloží hodnotu v úložišti vlastností závislostí.
Jak typ vlastníka používá připojené vlastnosti
I když lze připojené vlastnosti nastavit u libovolného elementu XAML (nebo jakéhokoli podkladového Objektu DependencyObject), což neznamená, že nastavení vlastnosti vytváří hmatatelný výsledek nebo že se k této hodnotě dostanete někdy. Typ, který definuje připojenou vlastnost, se obvykle řídí jedním z těchto scénářů:
- Typ, který definuje připojenou vlastnost je nadřazený v relaci jiných objektů. Podřízené objekty nastaví hodnoty pro připojenou vlastnost. Typ vlastníka připojené vlastnosti má určité vrozené chování, které skenuje své podřízené prvky, získává hodnoty a pracuje s těmito hodnotami v určitém okamžiku životnosti objektu (akce rozložení, SizeChanged atd.).
- Typ, který definuje připojenou vlastnost, se používá jako podřízený prvek pro řadu možných nadřazených prvků a modelů obsahu, ale informace nemusí nutně být informace rozložení.
- Připojená vlastnost hlásí informace o službě, nikoli jinému prvku uživatelského rozhraní.
Další informace o těchto scénářích a vlastních typech najdete v části Další informace o objektech Canvas.Left ve vlastních připojených vlastnostech.
Připojené vlastnosti v kódu
Připojené vlastnosti nemají typické obálky vlastností pro snadné získání a nastavení přístupu, jako jsou jiné vlastnosti závislosti. Důvodem je to, že připojená vlastnost není nutně součástí modelu objektů zaměřeného na kód pro případy, kdy je vlastnost nastavena. Je však přípustné, i když neobvyklé, definovat vlastnost, která je připojená vlastnost, kterou mohou ostatní typy nastavit pro sebe, a která má také konvenční použití vlastnosti na vlastní typ.
K nastavení připojené vlastnosti v kódu existují dva způsoby: použití rozhraní API systému vlastností nebo použití přístupových objektů vzorů XAML. Tyto techniky jsou z hlediska jejich konečného výsledku poměrně ekvivalentní, takže ten, který se má použít, je většinou otázkou stylu kódování.
Použití systému vlastností
Připojené vlastnosti prostředí prostředí Windows Runtime jsou implementovány jako vlastnosti závislosti, aby hodnoty mohly být uloženy ve sdíleném úložišti vlastností závislostí systémem vlastností. Připojené vlastnosti proto zpřístupňují identifikátor vlastnosti závislosti ve vlastní třídě.
Chcete-li nastavit připojenou vlastnost v kódu, voláte metodu SetValue a předáte identifikátor DependencyProperty pole, které slouží jako identifikátor pro tuto připojenou vlastnost. (Také předáte hodnotu, kterou chcete nastavit.)
Chcete-li získat hodnotu připojené vlastnosti v kódu, zavoláte metodu GetValue a poté opět předáte pole DependencyProperty, které slouží jako identifikátor.
Použití vzoru přístupového objektu XAML
Procesor XAML musí být schopen nastavit připojené hodnoty vlastností při analýze XAML do stromu objektů. Typ vlastníka připojené vlastnosti musí implementovat vyhrazené metody přístupového objektu pojmenované ve formátu GetPropertyName a SetPropertyName. Tyto specifické přístupové metody jsou také jedním ze způsobů, jak získat nebo nastavit připojenou vlastnost v kódu. Z pohledu kódu je připojená vlastnost podobná podkladovému poli, které místo přístupových objektů vlastností používá přístupové metody, a toto podkladové pole může existovat u jakéhokoli objektu, aniž by muselo být výslovně definováno.
Další příklad ukazuje, jak můžete nastavit připojenou vlastnost v kódu prostřednictvím rozhraní API pro přístup XAML. V tomto příkladu myCheckBox je instance CheckBox třídy. Poslední řádek je kód, který ve skutečnosti nastaví hodnotu; řádky před tím pouze vytvoří instance a jejich vztah rodič-dítě. Poslední řádek bez komentáře je syntaxe, pokud používáte systém vlastností. Poslední řádek s komentářem je syntaxe, pokud použijete vzor přistupovacího objektu XAML.
Canvas myC = new Canvas();
CheckBox myCheckBox = new CheckBox();
myCheckBox.Content = "Hello";
myC.Children.Add(myCheckBox);
myCheckBox.SetValue(Canvas.TopProperty,75);
//Canvas.SetTop(myCheckBox, 75);
Canvas myC;
CheckBox myCheckBox;
myCheckBox.Content(winrt::box_value(L"Hello"));
myC.Children().Append(myCheckBox);
myCheckBox.SetValue(Canvas::TopProperty(), winrt::box_value(75));
// Canvas::SetTop(myCheckBox, 75);
Canvas^ myC = ref new Canvas();
CheckBox^ myCheckBox = ref new CheckBox();
myCheckBox->Content="Hello";
myC->Children->Append(myCheckBox);
myCheckBox->SetValue(Canvas::TopProperty,75);
// Canvas::SetTop(myCheckBox, 75);
Vlastní připojené vlastnosti
Příklady kódu definování vlastních připojených vlastností a další informace o scénářích použití připojené vlastnosti naleznete v tématu Vlastní připojené vlastnosti.
Speciální syntaxe pro odkazy na připojené vlastnosti
Tečka v názvu připojené vlastnosti je klíčovou součástí identifikačního vzoru. Někdy se objevují nejasnosti, když syntaxe nebo situace považuje tečku za jiný význam. Tečka se například považuje za procházení objektového modelu pro cestu vazby. Ve většině případů zahrnujících takovou nejednoznačnost existuje speciální syntaxe pro připojenou vlastnost, která umožňuje, aby byla vnitřní tečka i nadále chápána jako oddělovač vlastník.vlastnost u připojené vlastnosti.
- Chcete-li zadat připojenou vlastnost jako součást cílové cesty pro animaci, uzavřete název připojené vlastnosti do závorek
()– například(Canvas.Left). Další informace najdete v tématu Syntaxe cesty vlastností.
Výstraha
Existující omezení implementace WinUI spočívá v tom, že nemůžete animovat vlastní připojenou vlastnost.
- Chcete-li zadat přidruženou vlastnost jako cílovou vlastnost pro referenci na prostředek ze souboru prostředku na x:Uid, použijte speciální syntaxi, která vloží ve stylu kódu, plně kvalifikovanou deklaraci using: uvnitř hranatých závorek ("[]"), aby se vytvořilo záměrné přerušení oboru. Například za předpokladu, že existuje prvek
<TextBlock x:Uid="Title" />, klíč prostředku v souboru prostředku, který cílí na hodnotu Canvas.Top v dané instanci, jeTitle.\[using:Microsoft.UI.Xaml.Controls\]Canvas.Top. Další informace o souborech prostředků a XAML najdete v tématu Lokalizace řetězců v uživatelském rozhraní.
Příbuzná témata
Windows developer