Scalone słowniki zasobów (WPF .NET)

Windows Presentation Foundation (WPF) obsługują funkcję scalonego słownika zasobów. Ta funkcja umożliwia definiowanie części zasobów aplikacji WPF poza skompilowaną aplikacją XAML. Następnie zasoby mogą być współużytkowane przez aplikacje i są wygodniejsze do lokalizacji.

Ważne

Dokumentacja przewodników klasycznych dla programu .NET 5 (i .NET Core) jest w trakcie budowy.

Tworzenie scalonego słownika

W znacznikach użyj następującej składni, aby wprowadzić scalony słownik zasobów do strony:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

Element ResourceDictionary nie ma dyrektywy x:Key,która jest zwykle wymagana dla wszystkich elementów w kolekcji zasobów. Jednak innym ResourceDictionary odwołaniem w kolekcji jest MergedDictionaries specjalny przypadek zarezerwowany dla tego scalonego scenariusza słownika zasobów. Ponadto element , który wprowadza scalony słownik zasobów, nie może mieć ResourceDictionary dyrektywy x:Key.

Zazwyczaj każdy w ResourceDictionary MergedDictionaries kolekcji określa Source atrybut. Wartość powinna być identyfikatorem URI, który jest rozpoznany jako lokalizacja pliku zasobów do Source scalenia. Miejsce docelowe tego URI musi być innym plikiem XAML z ResourceDictionary elementem głównym.

Uwaga

Definiowanie zasobów w obrębie określonego słownika jako scalonego jest prawne, jako alternatywa dla określenia wartości lub oprócz zasobów uwzględnionych z określonego ResourceDictionary Source źródła. Nie jest to jednak powszechny scenariusz. Głównym scenariuszem scalonych słowników jest scalanie zasobów z zewnętrznych lokalizacji plików. Jeśli chcesz określić zasoby w znacznikach dla strony, zdefiniuj je w słowniku głównym, a nie w ResourceDictionary scalonych słownikach.

Zachowanie scalonego słownika

Zasoby w scalanych słownikach zajmują lokalizację w zakresie wyszukiwania zasobów, który znajduje się tuż po zakresie głównego słownika zasobów, z którym są scalane. Mimo że klucz zasobu musi być unikatowy w obrębie dowolnego słownika, klucz może istnieć wiele razy w zestawie scalonych słowników. W tym przypadku zwrócony zasób będzie pochodzić z ostatniego słownika znalezionego sekwencyjnie w MergedDictionaries kolekcji. Jeśli kolekcja została zdefiniowana w języku XAML, kolejność scalonych słowników w kolekcji jest kolejnością elementów określoną w MergedDictionaries znacznikach. Jeśli klucz jest zdefiniowany w słowniku podstawowym, a także w słowniku, który został scalony, zwrócony zasób będzie pochodzić z słownika podstawowego. Te reguły zakresu są stosowane w równym stopniu zarówno w przypadku odwołań do zasobów statycznych, jak i odwołań do zasobów dynamicznych.

Scalone słowniki i kod

Scalone słowniki można dodawać do słownika Resources za pomocą kodu. Wartość domyślna, początkowo pusta, która istnieje dla dowolnej właściwości, ma również ResourceDictionary Resources domyślną, początkowo pustą MergedDictionaries właściwość kolekcji. Aby dodać scalony słownik za pomocą kodu, należy uzyskać odwołanie do żądanego obiektu podstawowego, pobrać jego wartość właściwości i wywołać obiekt ogólny, który znajduje się ResourceDictionary MergedDictionaries w Add Collection obiekcie MergedDictionaries . Obiekt, który dodajesz, musi być nowym obiektem ResourceDictionary .

W kodzie nie ustawiasz Source właściwości . Zamiast tego należy uzyskać obiekt , tworząc jeden obiekt ResourceDictionary lub ładuj go. Jednym ze sposobów załadowania istniejącego elementu w celu wywołania w istniejącym strumieniu plików XAML z katalogiem głównym, a następnie rzutowanie ResourceDictionary XamlReader.Load wartości ResourceDictionary zwracanej na ResourceDictionary .

Scalone URI słownika

Istnieje kilka technik dołączania scalonego słownika zasobów, które są wskazywane przez używany format identyfikatora URI. Ogólnie rzecz biorąc, techniki te można podzielić na dwie kategorie: zasoby, które są kompilowane w ramach projektu, i zasoby, które nie są kompilowane w ramach projektu.

W przypadku zasobów, które są kompilowane w ramach projektu, można użyć ścieżki względnej, która odwołuje się do lokalizacji zasobu. Ścieżka względna jest oceniana podczas kompilacji. Zasób musi być zdefiniowany jako część projektu jako akcja Kompilacja zasobu. Jeśli dołączysz plik XAML zasobu w projekcie jako zasób, nie musisz kopiować pliku zasobów do katalogu wyjściowego, zasób jest już uwzględniony w skompilowanej aplikacji. Możesz również użyć akcji Kompilacja zawartości, ale musisz następnie skopiować pliki do katalogu wyjściowego, a także wdrożyć pliki zasobów w tej samej relacji ścieżki do pliku wykonywalnego.

Uwaga

Nie używaj akcji kompilacji zasobu osadzonego. Sama akcja kompilacji jest obsługiwana w przypadku aplikacji WPF, ale rozdzielczość nie obejmuje , dlatego nie może oddzielić poszczególnych zasobów Source ResourceManager od strumienia. Nadal można używać zasobu osadzonego do innych celów, o ile został on również użyty ResourceManager do uzyskania dostępu do zasobów.

Powiązaną techniką jest użycie URI pakietu do pliku XAML i nazwanie go źródłem. Pack URI umożliwia odwołania do składników zestawów, do których się odwoływuje, i innych technik. Aby uzyskać więcej informacji na temat interfejsów URI pakietu, zobacz Zasób aplikacji WPF, zawartość i pliki danych.

W przypadku zasobów, które nie są kompilowane w ramach projektu, wartość URI jest oceniana w czasie uruchamiania. Aby odwołać się do pliku zasobów, można użyć typowego transportu za pomocą adresu URI, takiego jak plik: lub http: . Wadą korzystania z nieskompilowanego podejścia do zasobów jest plik : dostęp wymaga dodatkowych kroków wdrażania, a protokół HTTP: dostęp implikuje internetową strefę zabezpieczeń.

Ponowne ponowne łączenie słowników

Można ponownie użyć lub udostępnić scalone słowniki zasobów między aplikacjami, ponieważ słownik zasobów do scalenia może być przywoływyny za pomocą dowolnego prawidłowego identyfikatora URI. Dokładnie to, jak to zrobisz, zależy od strategii wdrażania aplikacji i modelu aplikacji, który należy stosować. Wcześniej wymieniona strategia URI pakietu umożliwia zwykle źródło scalonego zasobu w wielu projektach podczas opracowywania przez udostępnienie odwołania do zestawu. W tym scenariuszu zasoby są nadal dystrybuowane przez klienta i co najmniej jedna z aplikacji musi wdrożyć przywoływane zestawy. Można również odwoływać się do scalonych zasobów za pośrednictwem rozproszonego adresu URI, który używa protokołu http:.

Innym możliwym scenariuszem scalania słowników i wdrażania aplikacji jest pisanie scalonych słowników jako lokalnych plików aplikacji lub w lokalnym magazynie udostępnionym.

Lokalizacja

Jeśli zasoby, które muszą być zlokalizowane, są izolowane do słowników scalanych z podstawowymi słownikami i przechowywane jako luźny kod XAML, te pliki mogą być zlokalizowane oddzielnie. Ta technika jest lekką alternatywą dla lokalizacji zestawów zasobów satelicie. Aby uzyskać szczegółowe informacje, zobacz WPF Globalization and Localization Overview (Globalizacja i lokalizacja WPF — omówienie).

Zobacz też