ComponentResourceKey — Rozszerzenie znaczników

Definiuje i odwołuje się do kluczy dla zasobów, które są ładowane z zestawów zewnętrznych. Dzięki temu podczas wyszukiwania zasobów można określić typ docelowy w zestawie, a nie jawny słownik zasobów w zestawie lub klasie.

Użycie atrybutu XAML (klucz ustawienia, kompaktowanie)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />  

Użycie atrybutu XAML (klucz ustawienia, pełne)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />  

Użycie atrybutu XAML (żądanie zasobu, kompaktowa)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />  

Użycie atrybutu XAML (żądanie zasobu, pełne)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />  

Wartości XAML

Wartość Opis
targetTypeName Nazwa typu publicznego środowiska uruchomieniowego języka wspólnego (CLR) zdefiniowanego w zestawie zasobów.
targetID Klucz zasobu. Podczas odnośnika zasobów element targetID będzie analogiczny do dyrektywy x:Key zasobu.

Uwagi

Jak podano w powyższych zastosowaniach, użycie rozszerzenia znaczników {ComponentResourceKey} znajduje się w dwóch miejscach:

  • Definicja klucza w słowniku zasobów motywu, dostarczana przez autora kontrolki.

  • Uzyskiwanie dostępu do zasobu motywu z zestawu w przypadku ponownego zaszytegowania kontrolki, ale gdy chcesz użyć wartości właściwości, które pochodzą z zasobów dostarczanych przez motywy kontrolki.

W przypadku odwoływania się do zasobów składników, które pochodzą z motywów, zazwyczaj zaleca się {DynamicResource} użycie elementu zamiast .{StaticResource} Jest to widoczne w danych użycia. {DynamicResource} Jest to zalecane, ponieważ sam motyw może zostać zmieniony przez użytkownika. Jeśli chcesz, aby zasób składnika, który najlepiej pasuje do intencji autora kontrolki w zakresie obsługi motywu, należy włączyć dynamiczne odwołanie do zasobu składnika.

Element TypeInTargetAssembly identyfikuje typ, który istnieje w zestawie docelowym, w którym zasób jest faktycznie zdefiniowany. Typ ComponentResourceKey może być definiowany i używany TypeInTargetAssembly niezależnie od dokładnej wiedzy o tym, gdzie jest zdefiniowany, ale ostatecznie musi rozpoznać typ za pomocą przywołynych zestawów.

Typowe zastosowanie dla jest ComponentResourceKey definiowanie kluczy, które są następnie udostępniane jako składowe klasy. W przypadku tego użycia należy użyć konstruktora ComponentResourceKey klasy, a nie rozszerzenia znaczników. Aby uzyskać więcej informacji, zobacz ComponentResourceKeylub sekcję "Definiowanie i odwoływanie się do kluczy dla zasobów motywu" w temacie Omówienie tworzenia kontrolek.

Zarówno w przypadku ustanawiania kluczy, jak i odwoływania się do zasobów z kluczami, składnia atrybutów jest często używana dla rozszerzenia ComponentResourceKey znaczników.

Pokazana kompaktowa składnia opiera się na podpisie ComponentResourceKey konstruktora i użyciu parametrów pozytualnych rozszerzenia znaczników. Kolejność, w której są targetTypeNametargetID podane i jest ważna. Pełnej składni opiera się ComponentResourceKey na konstruktorze bez parametrów, TypeInTargetAssemblyResourceId a następnie ustawia i w sposób, który jest analogiczny do składni atrybutu true w elemencie obiektu. W pełnej składni kolejność, w której są ustawiane właściwości, nie jest ważna. Relacje i mechanizmy tych dwóch alternatyw (kompaktowych i pełnych) opisano bardziej szczegółowo w temacie Rozszerzenia znaczników i WPF XAML.

Technicznie rzecz ujmuje się, że targetID wartością obiektu może być dowolny obiekt. Nie musi to być ciąg. Jednak najbardziej powszechnym zastosowaniem w WPF targetID jest wyrównywanie wartości z formularzami, które są ciągami, a takie ciągi są prawidłowe w gramatyce XamlName.

ComponentResourceKey Może być używany w składni elementu obiektu. W takim przypadku określenie wartości właściwości TypeInTargetAssembly i ResourceId jest wymagane do poprawnego zainicjowania rozszerzenia.

W implementacji czytnika XAML WPF obsługa tego rozszerzenia znaczników jest definiowana przez klasę ComponentResourceKey .

ComponentResourceKey jest rozszerzeniem znaczników. Rozszerzenia znaczników są zazwyczaj implementowane w sytuacji, gdy istnieje wymóg, aby wartości atrybutów były wyprowadzane w postaci innej niż wartości literałów lub nazwy programów obsługi, a wymóg ma charakter bardziej globalny niż zwykłe umieszczenie konwerterów typów w niektórych typach lub właściwościach. Wszystkie rozszerzenia znaczników w języku XAML używają znaków { i } w składni atrybutów, czyli konwencji, zgodnie z którą procesor XAML rozpoznaje, że rozszerzenie znaczników musi przetworzyć atrybut. Aby uzyskać więcej informacji, zobacz Rozszerzenia znaczników i WPF XAML.

Zobacz też