DynamicResource — Rozszerzenie znaczników

Dostarcza wartość dla dowolnego atrybutu właściwości przez odroczenie tej wartości jako XAML 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

key Klucz żądanego zasobu. Ten klucz został początkowo przypisany przez dyrektywę x:Key, jeśli zasób został utworzony w znaczniku lub został podany jako parametr podczas wywoływania, jeśli zasób został key utworzony w ResourceDictionary.Add kodzie.

Uwagi

Obiekt 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 DynamicResource utworzenia obiektu. Może to być możliwe po XAML załadowaniu strony. 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 jest równoważne pozycji, w której jest stosowane DynamicResource dynamiczne odwołanie do zasobów. Jeśli ustawisz wartość lokalną dla właściwości, która wcześniej miała wyrażenie jako wartość lokalną, obiekt DynamicResource DynamicResource 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 dla systemu DynamicResource , 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 powinien odpowiadać istniejącemu zasobowi określonemu przez ResourceKey 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 , są zgodne z logiką wyszukiwania zasobów FindResource 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że być również używany w pełne użycie atrybutu, który określa właściwość ResourceKey jako właściwość = wartość pary:

<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 WPF XAML implementacji procesora obsługa tego rozszerzenia znaczników jest definiowana przez DynamicResourceExtension klasę .

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 programie używają znaków { i } w składni atrybutów, czyli konwencji, zgodnie z którą procesor rozpoznaje, że rozszerzenie znaczników musi przetworzyć XAML XAML atrybut. Aby uzyskać więcej informacji, zobacz Rozszerzenia znaczników i WPF XAML.

Zobacz też