ComponentResourceKey – rozšíření zápisu značek
Definuje a odkazuje na klíče pro prostředky načtené z externích sestavení. To umožňuje vyhledávání prostředků určit cílový typ v sestavení, nikoli explicitní slovník prostředků v sestavení nebo ve třídě.
Použití atributu XAML (nastavení klíče, kompaktní)
<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />
Použití atributu XAML (nastavení klíčů, podrobné)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />
Použití atributu XAML (žádost o prostředek, kompaktní)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />
Použití atributu XAML (žádající o prostředky, podrobný)
<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />
Hodnoty XAML
Hodnota | Popis |
---|---|
targetTypeName |
Název typu CLR (Public Common Language Runtime), který je definován v sestavení prostředků. |
targetID |
Klíč prostředku. Při vyhledání prostředků budou targetID analogické s direktivou x:Key prostředku. |
Poznámky
Jak je vidět na výše zmíněných použitích, použití značkovacího rozšíření {ComponentResourceKey
} se nachází na dvou místech:
Definice klíče ve slovníku zdrojů tématu, jak ji poskytuje autor ovládacího prvku.
Přístup k prostředku motivu ze sestavení při retemplatování ovládacího prvku, kdy chcete použít hodnoty vlastností, které pocházejí z prostředků poskytovaných tématy ovládacího prvku.
Pro odkazování na prostředky komponent, které pocházejí z motivů, se obecně doporučuje používat {DynamicResource}
místo {StaticResource}
. To se zobrazuje v využitích.
{DynamicResource}
se doporučuje, protože samotný motiv může uživatel změnit. Pokud chcete, aby prostředek komponenty co nejvíce odpovídal záměru autora ovládacího prvku při podpoře motivu, měli byste také povolit, aby odkaz na prostředek komponenty byl dynamický.
TypeInTargetAssembly identifikuje typ, který existuje v cílovém sestavení, kde je prostředek skutečně definován.
ComponentResourceKey
lze definovat a používat nezávisle na tom, kde přesně je definován TypeInTargetAssembly, ale typ musí být nakonec určen prostřednictvím odkazovaných sestavení.
Běžným použitím ComponentResourceKey je definovat klíče, které se pak zveřejňují jako členové třídy. V tomto případě použijete konstruktor třídy ComponentResourceKey, nikoli rozšíření značek. Další informace najdete v ComponentResourceKeynebo v části "Definování a odkazování klíčů pro zdroje motivů" tématu Přehled vytváření ovládacích prvků.
Pro navazování klíčů i odkazování na klíčové prostředky se atributová syntaxe běžně používá pro rozšíření značek ComponentResourceKey
.
Kompaktní syntaxe zobrazená spoléhá na podpis konstruktoru ComponentResourceKey a použití pozičního parametru rozšíření značkování. Pořadí, ve kterém jsou uvedeny targetTypeName
a targetID
, je důležité. Detailní syntaxe spoléhá na konstruktor bez parametrů ComponentResourceKey a potom nastaví TypeInTargetAssembly a ResourceId způsobem, který je analogický skutečné syntaxi atributů u prvku objektu. Ve podrobné syntaxi není pořadí, ve kterém jsou vlastnosti nastaveny, důležité. Vztah a mechanismy těchto dvou alternativ (kompaktní a podrobné) jsou podrobněji popsány v tématu Markup Extensions a WPF XAML.
Technicky vzato může být hodnota targetID
libovolným objektem, nemusí to být řetězec. Nejběžnějším použitím WPF je však zarovnání hodnoty targetID
s formáty, které jsou řetězci, a kde tyto řetězce jsou platné v XamlName Grammar.
ComponentResourceKey
lze použít v syntaxi elementu objektu. V tomto případě se k správné inicializaci rozšíření vyžaduje zadání hodnoty TypeInTargetAssembly i vlastností ResourceId.
V implementaci čtečky WPF XAML je zpracování tohoto rozšíření značek definováno třídou ComponentResourceKey.
ComponentResourceKey
je rozšíření zpracování. Rozšíření značek se obvykle implementují, pokud existuje požadavek transformovat hodnoty atributů na jiné, než aby byly pouze literální hodnoty nebo názvy obslužných rutin, a tento požadavek vyžaduje globálnější přístup, než je pouhé použití převaděče typů na specifické typy nebo vlastnosti. Všechna rozšíření značkovací v XAML používají znaky { a } v syntaxi atributu, což představuje konvenci, podle které procesor XAML rozpozná, že rozšíření značkovací musí zpracovat atribut. Další informace naleznete v tématu Rozšíření značek a WPF XAML.
Viz také
- ComponentResourceKey
- ControlTemplate
- Přehled vytváření ovládacích prvků
- XAML v WPF
Rozšíření značek & WPF XAML
.NET Desktop feedback