ComponentResourceKey – rozšíření 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íče, podrobné)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />
Použití atributu XAML (vyžádání prostředku, kompaktní)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />
Použití atributu XAML (žádost o prostředek, podrobné sestavení)
<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í targetID prostředků bude obdobou direktivy x:Key prostředku. |
Poznámky
Jak je vidět na výše uvedených využitích, využití rozšíření značek {ComponentResourceKey
} se nachází na dvou místech:
Definice klíče ve slovníku prostředků motivu, jak poskytuje autor ovládacího prvku.
Přístup k prostředku motivu ze sestavení při opakování ovládacího prvku, ale chcete použít hodnoty vlastností, které pocházejí z prostředků poskytovaných motivy ovládacího prvku.
Pro odkazování na prostředky komponent, které pocházejí z motivů, se obecně doporučuje místo {DynamicResource}
{StaticResource}
. To se zobrazuje v využitích. {DynamicResource}
je doporučeno, protože samotný motiv může uživatel změnit. Pokud chcete, aby prostředek komponenty, který nejvíce odpovídá záměru autora ovládacího prvku pro podporu motivu, měli byste povolit, aby odkaz na prostředek komponenty byl také dynamický.
Identifikuje TypeInTargetAssembly typ, který existuje v cílovém sestavení, kde je prostředek skutečně definován. Lze ComponentResourceKey
definovat a používat nezávisle na tom, kde TypeInTargetAssembly přesně je definováno, ale nakonec musí tento typ vyřešit 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. Pro toto použití použijete ComponentResourceKey konstruktor třídy, nikoli rozšíření značek. Další informace najdete v části ComponentResourceKey"Definování a odkazování klíčů pro prostředky motivu" tématu Přehled vytváření ovládacích prvků.
Pro navazování klíčů i odkazování na klíčové prostředky se syntaxe atributů běžně používá pro ComponentResourceKey
rozšíření značek.
Zobrazená kompaktní syntaxe závisí na podpisu konstruktoru ComponentResourceKey a použití pozičního parametru rozšíření značek. Pořadí, ve kterém targetTypeName
jsou uvedeny, targetID
je důležité. Podrobná syntaxe spoléhá na ComponentResourceKey konstruktor bez parametrů a pak nastaví TypeInTargetAssembly a ResourceId způsobem, který je podobný syntaxi true atributu u elementu 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 Rozšíření značek a WPF XAML.
Technicky vzato může být hodnota targetID
jakéhokoli objektu, nemusí to být řetězec. Nejběžnějším použitím WPF je však zarovnání targetID
hodnoty s formuláři, které jsou řetězce, a kde jsou tyto řetězce 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 obou TypeInTargetAssembly vlastností ResourceId .
V implementaci čtečky WPF XAML je zpracování tohoto rozšíření značek definováno ComponentResourceKey třídou.
ComponentResourceKey
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í {a } znaků 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