Udostępnij za pośrednictwem


DynamicResource — Rozszerzenie znaczników

Zawiera 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 wykonywania.

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 został podany jako key parametr podczas wywoływaniaResourceDictionary.Add, jeśli zasób został utworzony w kodzie.

Uwagi

Element DynamicResource utworzy wyrażenie tymczasowe podczas początkowej kompilacji, a tym samym odroczyć wyszukiwanie zasobów do momentu, gdy żądana wartość zasobu będzie rzeczywiście wymagana w celu utworzenia obiektu. Może to być potencjalnie po załadowaniu strony XAML. Wartość zasobu zostanie znaleziona na podstawie wyszukiwania klucza dla wszystkich aktywnych słowników zasobów rozpoczynających się 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, DynamicResource w której jest stosowane odwołanie do zasobów dynamicznych. Jeśli ustawisz wartość lokalną dla właściwości, która wcześniej miała wyrażenie jako wartość lokalną DynamicResource , zostanie całkowicie usunięta DynamicResource . Aby uzyskać szczegółowe informacje, zobacz 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 Markup. Zobacz Zasoby XAML, aby zapoznać się z omówieniem względnych zalet i konsekwencji wydajności i StaticResourceDynamicResource .

Określony ResourceKey powinien odpowiadać istniejącemu zasobowi określonemu przez dyrektywę x:Key na pewnym poziomie strony, aplikacji, dostępnych motywów kontroli i zasobów zewnętrznych lub zasobów systemowych, a wyszukiwanie zasobów nastąpi w tej kolejności. Aby uzyskać więcej informacji na temat wyszukiwania zasobów dla zasobów statycznych i dynamicznych, zobacz Zasoby XAML.

Klucz zasobu może być dowolnym ciągiem zdefiniowanym w gramatyce XamlName. Klucz zasobu może być również innymi typami obiektów, takimi jak Type. Type Kluczem jest to, jak kontrolki mogą być stylowane przez motywy. Aby uzyskać więcej informacji, zobacz Omówienie tworzenia kontrolek.

Interfejsy API do wyszukiwania wartości zasobów, takich jak FindResource, są zgodne z tą samą logiką wyszukiwania zasobów, która jest używana przez DynamicResourceprogram .

Alternatywnym sposobem deklaratywnego odwoływania się do zasobu jest rozszerzenie staticResource Markup.

Składnią atrybutu jest składnia najczęściej używana z tym rozszerzeniem znacznika. Token ciągu podany po przypisaniu ciągu identyfikatora DynamicResource jako ResourceKey wartości podstawowej DynamicResourceExtension klasy rozszerzenia.

DynamicResource można używać w składni elementu obiektu. W takim przypadku określenie wartości ResourceKey właściwości jest wymagane.

DynamicResource Można również użyć w pełnym 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ą właściwość settable, która jest wymagana, to pełne użycie nie jest typowe.

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

DynamicResource 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ż