Dziś będzie poruszony temat zasobów w WPF. A mówiąc ściślej zasobów binarnych. Zasoby te mogą być umieszczone w 3 różnych miejscach. Mogą być:

  • wewnątrz assembly

  • “luźne” pliki znane aplikacji w czasie kompilacji

  • “luźne” pliki nieznane aplikacji podczas kompilacji

Gdy dodajemy nowy zasób do wyboru mamy mnóstwo opcji:

Dla nas istotne są:

  • Resource – umieszcza zasób w assembly

  • Content – pozostawia zasób jako “luźny” plik, ale odnotowuje fakt jego istnienia poprzez dodanie odpowiedniego atrybutu (AssemblyAssociateContentFile)

Lista duża, ale warto zwrócić uwagę na to czego nie stosować. Embedded Resource – jest to sposób znany sprzed WPF i powinien być unikany w aplikacjach.
Zanim przejdziemy do omówienia jak dostawać się do zasobów, mała uwaga. Jeśli chcemy aby nasze zasoby były lokalizowalne, należy umieszczać je jako Resource

Dostęp do zasobów

Aby użyć zasobów zdefiniowanych jako Resource wystarczy napisać:

<Image Source=”conan_doyle.gif” />

Prawdziwy problem z zasobami w WPF jest z rozszyfrowaniem ścieżki URI. Ta, bowiem może przyjmować wiele form. Spróbujmy pokrótce je omówić:

  • A/B/plik.jpg – zasób znajduje się w danym assembly, lub jest to “luźny” plik. A/B/ definiują strukturę podkatalogów (jeśli występują).

  • c:\folder\plik.jpg lub file://c:/folder/plik.jpg – “luźny” plik w folderze c:\folder

  • PlikDll;Component/A/B/plik.jpg – zasób zawarty w innym assembly (.dll lub .exe) znajdujący się w ewentualnym podkatalogu A/B/

  • pack://siteOfOrigin:,,,/A/B/plik.jpg – “luźny” plik znajdujący się w katalogu aplikacji (lub w podkatalogu A/B/ jeśli zdefiniowane)

Lokalizowanie zasobów

Lokalizowanie WPF’a to troszkę uciążliwy proces. Składa się wygenerowaniu unikalnych identyfikatorów dla każdego elementu naszego pliku XAML (można ro zrobić za pomocą narzędzia msbuild – msbuild.exe /t:updateuid NazwaProjektu.csproj). Następnie za pomocą narzędzia LocBaml generujemy plik .csv, w którym będziemy mogli przetłumaczyć na dowolny język. Dokładny opis można znaleźć w tym artykule.

Następnym razem będzie temat DataBindingu (co prawda na liście w kolejności jest temat obrazków – ale nie wiem co jeszcze w tym temacie można napisać).