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ż
.NET Desktop feedback