DynamicResource — Rozszerzenie znaczników
Dostarcza wartość dla dowolnego atrybutu właściwości XAML przez odroczenie tej wartości jako odwołania do zdefiniowanego zasobu. Zachowanie wyszukiwania dla tego zasobu jest analogiczne do wyszukiwania w czasie działania.
Użycie atrybutu języka XAML
<object property="{DynamicResource key}" ... />
Użycie elementu właściwości języka XAML
<object>
<object.property>
<DynamicResource ResourceKey="key" ... />
</object.property>
</object>
Wartości XAML
| Wartość | Opis |
|---|---|
key |
Klucz żądanego zasobu. Ten klucz został początkowo przypisany przez dyrektywę x:Key , jeśli zasób został utworzony w znaczniku lub keyResourceDictionary.Add został podany jako parametr podczas wywoływania, jeśli zasób został utworzony w kodzie. |
Uwagi
Obiekt DynamicResource utworzy wyrażenie tymczasowe podczas początkowej kompilacji i w ten sposób odroczy wyszukiwania zasobów do momentu, aż żądana wartość zasobu będzie faktycznie wymagana do utworzenia obiektu. Może to być możliwe po załadowaniu strony XAML. Wartość zasobu zostanie znaleziona na podstawie wyszukiwania kluczy względem wszystkich aktywnych słowników zasobów, począwszy od bieżącego zakresu strony, i zostanie zastąpiona wyrażeniem zastępczym z kompilacji.
Ważne
Jeśli chodzi o pierwszeństwo właściwości zależności, wyrażenie DynamicResource jest równoważne pozycji, w której jest stosowane odwołanie do zasobu dynamicznego. Jeśli ustawisz wartość lokalną dla właściwości, DynamicResource która wcześniej miała wyrażenie jako wartość lokalną, DynamicResource obiekt zostanie całkowicie usunięty. Aby uzyskać szczegółowe informacje, zobacz Dependency Property Value Precedence (Pierwszeństwo wartości właściwości zależności).
Niektóre scenariusze dostępu do zasobów są szczególnie odpowiednie w DynamicResource przypadku, w przeciwieństwie do rozszerzenia staticresource znaczników. Zobacz zasoby XAML, aby uzyskać omówienie względnych korzyści i implikacji wydajności elementów DynamicResource i StaticResource.
Określony element ResourceKey powinien odpowiadać istniejącemu zasobowi określonemu przez dyrektywę x:Key na pewnym poziomie na stronie, w aplikacji, dostępnych motywach sterujących i zasobach zewnętrznych lub zasobach systemowych, a wyszukiwania zasobów będą odbywać się w tej kolejności. Aby uzyskać więcej informacji na temat wyszukiwania zasobów dla zasobów statycznych i dynamicznych, zobacz Zasoby XAML.
Kluczem zasobu może być dowolny ciąg zdefiniowany w gramatyce XamlName. Kluczem zasobu mogą być również inne typy obiektów, takie jak Type. Kluczową Type zasadą jest sposób, w jaki kontrolki mogą być stylowane według motywów. Aby uzyskać więcej informacji, zobacz Control Authoring Overview (Omówienie tworzenia kontrolek).
Interfejsy API do wyszukiwania wartości zasobów, takich jak FindResource, są zgodne z logiką wyszukiwania zasobów używaną przez usługę DynamicResource.
Alternatywnym deklaratywnym sposobem odwoływania się do zasobu jest rozszerzenie staticresource znaczników.
Składnią atrybutu jest składnia najczęściej używana z tym rozszerzeniem znacznika. Token ciągu podany po ciągu DynamicResource identyfikatora jest przypisywany jako ResourceKey wartość bazowej klasy DynamicResourceExtension rozszerzenia.
DynamicResource Może być używany w składni elementu obiektu. W takim przypadku określenie wartości właściwości ResourceKey jest wymagane.
DynamicResource Można również użyć w pełnej użyciu atrybutu, który określa ResourceKey właściwość jako parę property=value:
<object property="{DynamicResource ResourceKey=key}" ... />
Szczegółowe definicje są często przydatne w rozszerzeniach zawierających więcej niż jedną konfigurowalną właściwość albo gdy niektóre właściwości są opcjonalne. Ponieważ DynamicResource ma tylko jedną ustawianą właściwość, która jest wymagana, to pełne użycie nie jest typowe.
W implementacji procesora XAML WPF obsługa tego rozszerzenia znaczników jest definiowana przez klasę DynamicResourceExtension .
DynamicResource 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.