Udostępnij za pośrednictwem


StaticResource rozszerzenie znacznikowe

Udostępnia wartość dla dowolnego atrybutu właściwości XAML, wyszukując odwołanie do już zdefiniowanego zasobu. Zachowanie wyszukiwania dla tego zasobu jest analogiczne do wyszukiwania w czasie ładowania, które będzie wyszukiwać zasoby, które zostały wcześniej załadowane z znaczników bieżącej strony XAML, a także innych źródeł aplikacji, i spowoduje wygenerowanie tej wartości zasobu jako wartości właściwości w obiektach czasu wykonywania.

Użycie atrybutu XAML

<object property="{StaticResource key}" ... />

Użycie elementu obiektu XAML

<object>
  <object.property>
<StaticResource 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 utworzono w znacznikach lub podano jako parametr key podczas wywoływania ResourceDictionary.Add, jeśli zasób utworzono w kodzie.

Uwagi

Ważne

StaticResource nie może podjąć próby wcześniejszego odniesienia się do zasobu, który jest zdefiniowany leksykalnie dalej w pliku XAML. Próba wykonania tej czynności nie jest obsługiwana, a nawet jeśli takie odwołanie nie zakończy się niepowodzeniem, próba odwołania do przodu spowoduje naliczenie kary za wydajność czasu ładowania, gdy wewnętrzne tabele skrótów reprezentujące ResourceDictionary są przeszukiwane. Aby uzyskać najlepsze wyniki, dostosuj strukturę słowników zasobów, aby można było uniknąć forwardowych odwołań. Jeśli nie możesz uniknąć odwołania do przodu, użyj rozszerzenia DynamicResource Markup zamiast tego.

Określony ResourceKey powinien odpowiadać istniejącemu zasobowi, zidentyfikowany za pomocą dyrektywy x:Key na jakimś poziomie w stronie, aplikacji, dostępnych motywach sterowania, zasobach zewnętrznych lub zasobach systemowych. Wyszukiwanie zasobów odbywa się w tej kolejności. Aby uzyskać więcej informacji na temat zachowania przeszukiwania zasobów dla zasobów statycznych i dynamicznych, zobacz Zasoby XAML.

Klucz zasobu może być dowolnym ciągiem zdefiniowanym w XamlName Grammar. Klucz zasobu może być również innym typem obiektu, takim jak Type. Klucz Type jest kluczowy dla sposobu, w jaki kontrolki mogą być stylowane przez motywy za pomocą niejawnego klucza stylu. Aby uzyskać więcej informacji, zobacz Przegląd tworzenia interfejsów sterowania.

Alternatywnym sposobem deklaratywnego odwoływania się do zasobu jest Rozszerzenie znaczników DynamicResource.

Składnia atrybutów jest najczęściej używaną składnią z tym rozszerzeniem znaczników. Token ciągu podany po identyfikatorze StaticResource jest przypisany jako wartość ResourceKey podstawowej klasy rozszerzenia StaticResourceExtension.

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

StaticResource można również użyć w rozbudowanym zastosowaniu atrybutu, który określa właściwość ResourceKey jako parę właściwość=wartość.

<object property="{StaticResource ResourceKey=key}" ... />

Użycie w trybie szczegółowym jest często przydatne w przypadku rozszerzeń, które mają więcej niż jedną właściwość możliwą do ustawienia, albo jeśli niektóre właściwości są opcjonalne. Ponieważ StaticResource ma tylko pewną właściwość możliwą do ustawienia, która jest wymagana, takie obszerne użycie nie jest typowe.

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

StaticResource jest rozszerzeniem znacznikowym. Rozszerzenia znaczników są zwykle implementowane, gdy istnieje potrzeba zmiany wartości atrybutów na inne niż wartości literalne lub nazwy procedur obsługujących, a potrzeba jest bardziej globalna, niż tylko stosowanie konwerterów typów dla określonych 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 sekcje Rozszerzenia znaczników iWPF XAML.

Zobacz także