Udostępnij za pośrednictwem


ComponentResourceKey, rozszerzenie znaczników

Definiuje klucze i odwołuje się do nich dla zasobów ładowanych z zewnętrznych zestawów. 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 atrybutu XAML (klucz ustawień, zwarta wersja)

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

Użycie atrybutów XAML (ustawienie klucza, szczegółowe)

<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, szczegółowe)

<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. Gdy zasoby są przeszukiwane, targetID będzie analogiczne 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 kontroli.

  • Uzyskiwanie dostępu do zasobu motywu z zestawu podczas przedefiniowania kontrolki, jednocześnie chcąc użyć wartości właściwości pochodzących z zasobów dostarczonych przez motywy tej kontrolki.

W przypadku odwoływania się do zasobów składników pochodzących z motywów zaleca się używanie {DynamicResource} zamiast {StaticResource}. To jest pokazane w użyciach. {DynamicResource} jest zalecane, ponieważ sam motyw może zostać zmieniony przez użytkownika. Jeśli chcesz, aby zasób komponentu jak najdokładniej odpowiadał intencji autora kontrolki dotyczącej obsługi motywu, powinieneś również włączyć dynamiczność swojego odwołania do zasobów komponentu.

TypeInTargetAssembly identyfikuje typ, który istnieje w zestawie docelowym, w którym faktycznie zdefiniowano zasób. Można zdefiniować i używać ComponentResourceKey niezależnie od dokładnej wiedzy, gdzie zdefiniowano TypeInTargetAssembly, ale ostatecznie należy określić typ poprzez odwołanie do powiązanych zestawów.

Typowym zastosowaniem ComponentResourceKey jest zdefiniowanie kluczy, które są następnie udostępniane jako elementy członkowskie klasy. W przypadku tego użycia należy użyć konstruktora klasy ComponentResourceKey, 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.

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

Pokazana składnia kompaktowa opiera się na sygnaturze konstruktora ComponentResourceKey oraz użyciu parametrów pozycyjnych rozszerzenia składni. Ważna jest kolejność, w jakiej podano targetTypeName i targetID. Składnia szczegółowa opiera się na konstruktorze bez parametrów ComponentResourceKey, a następnie ustawia TypeInTargetAssembly 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. Związek i mechanizmy tych dwóch alternatyw (zwięzły i szczegółowy) opisano bardziej szczegółowo w temacie Rozszerzenia znaczników i WPF XAML.

Technicznie wartość targetID może być dowolnym obiektem, ale nie musi być ciągiem. Jednak najczęstszym zastosowaniem w WPF jest wyrównanie wartości targetID z formularzami, które są ciągami, i gdzie takie ciągi są prawidłowe w XamlName Grammar.

ComponentResourceKey można użyć 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 jest rozszerzeniem znaczników. Rozszerzenia znaczników są zwykle implementowane, gdy istnieje potrzeba zmiany interpretacji wartości atrybutów na inne niż wartości bezpośrednio określone lub nazwy obsług, a to zapotrzebowanie jest bardziej globalne niż stosowanie konwerterów typów dla pewnych typów lub właściwości. 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ż