ComponentResourceKey — Rozszerzenie znaczników

Definiuje i odwołuje się do kluczy dla zasobów ładowanych z zestawów zewnętrznych. Dzięki temu wyszukiwanie zasobów umożliwia określenie typu docelowego w zestawie, a nie jawnego słownika zasobów w zestawie lub w klasie.

Użycie atrybutów XAML (ustawienie klucza, kompaktowanie)

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

Użycie atrybutów XAML (ustawienie klucza, pełne)

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

Użycie atrybutów XAML (żądanie zasobu, kompaktowanie)

<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 środowiska uruchomieniowego języka wspólnego publicznego (CLR) zdefiniowanego w zestawie zasobów.
targetID Klucz zasobu. Po wyszukaniu targetID zasobów będzie ona analogiczna do dyrektywy x:Key zasobu.

Uwagi

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

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

  • Uzyskiwanie dostępu do zasobu motywu z zestawu podczas ponownego tworzenia kontrolki, ale chcesz użyć wartości właściwości pochodzących z zasobów dostarczonych przez motywy kontrolki.

W przypadku odwoływania się do zasobów składników pochodzących z motywów zaleca się używanie {DynamicResource} zamiast {StaticResource}. Jest to wyświetlane w przypadku użycia. {DynamicResource} jest 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 do obsługi motywu, należy również włączyć odwołanie do zasobów składników.

Element TypeInTargetAssembly identyfikuje typ, który istnieje w zestawie docelowym, w którym faktycznie zdefiniowano zasób. Element ComponentResourceKey może być zdefiniowany i używany niezależnie od znajomości dokładnie tego, gdzie TypeInTargetAssembly jest zdefiniowany, ale ostatecznie musi rozpoznać typ za pomocą zestawów, do których odwołuje się odwołanie.

Typowym zastosowaniem jest ComponentResourceKey zdefiniowanie kluczy, które są następnie udostępniane jako elementy członkowskie klasy. W przypadku tego użycia należy użyć konstruktora ComponentResourceKey klasy, a nie rozszerzenia znaczników. Aby uzyskać więcej informacji, zobacz ComponentResourceKeysekcję "Definiowanie i odwoływanie się do kluczy dla zasobów motywu" tematu Omówienie tworzenia kontrolek.

W przypadku ustanawiania kluczy i odwoływania się do kluczowych zasobów składnia atrybutów jest często używana dla ComponentResourceKey rozszerzenia znaczników.

Pokazana składnia kompaktowa opiera się na sygnaturze ComponentResourceKey konstruktora i użyciu parametrów pozycyjnych rozszerzenia znaczników. Kolejność, w jakiej podano element targetTypeName i targetID , jest ważna. Składnia szczegółowa opiera się na konstruktorze ComponentResourceKey bez parametrów, a następnie ustawia TypeInTargetAssembly elementy i ResourceId w sposób analogiczny do prawdziwej składni atrybutu elementu obiektu. W składni pełnej kolejność ustawiania właściwości nie jest ważna. Relacje i mechanizmy tych dwóch alternatyw (kompaktowanie i pełne) opisano bardziej szczegółowo w temacie Markup Extensions i WPF XAML.

Technicznie wartość targetID parametru może być dowolnym obiektem, ale nie musi być ciągiem. Jednak najczęstszym użyciem w WPF jest dopasowanie targetID wartości do formularzy, które są ciągami, i gdzie takie ciągi są prawidłowe w gramatyce XamlName.

ComponentResourceKey można używać w składni elementu obiektu. W takim przypadku określenie wartości właściwości TypeInTargetAssembly i ResourceId jest wymagane do prawidłowego zainicjowania rozszerzenia.

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

ComponentResourceKey to rozszerzenie 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 ich składni atrybutu, która jest konwencją, 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ż