uwp
Zasoby w UWP (StaticResource / ThemeResource) i ResourceDictionary
Szukaj…
Wprowadzenie
W nowych aplikacjach systemu Windows 10 istnieje wiele sposobów odwoływania się do zasobu w kodzie XAML lub w kodzie z tyłu. Przede wszystkim musisz zadeklarować zasoby w dostępnym miejscu. Najłatwiejszym sposobem jest zadeklarowanie ResourceDictionary
w kontekście, powiedzmy na bieżącej stronie.
1. Słownik zasobów
Fragment z MainPage.xaml
<Page x:Class="MyNewApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:MyNewApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <!-- Creates a resource dictionary in the page context --> <ResourceDictionary> <!-- This is a solid color brush resource NOTE: Each resource inside a resource dictionary must have a key --> <SolidColorBrush x:Key="ColorRed">Red</SolidColorBrush> </ResourceDictionary> </Page.Resources> <!-- Using ThemeResource in here to access a resource already defined --> <Grid Background="{ThemeResource ColorRed}"> </Grid> </Page>
2. Globalne zasoby
Słowniki zasobów są dostępne tylko w kontekście, w którym zostały zadeklarowane, więc jeśli zamierzamy odwoływać się do zasobów zadeklarowanych w kontekście jednej strony z innej strony, nie zostaną one znalezione. Jeśli więc chcemy zdefiniować globalne zasoby, takie jak te dostarczane w ramach, robimy to w App.xaml
Fragment z App.xaml
<Application x:Class="MyNewApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" RequestedTheme="Dark"> <Application.Resources> <ResourceDictionary> <SolidColorBrush x:Key="ColorRed">Red</SolidColorBrush> </ResourceDictionary> </Application.Resources> </Application>
W ten sposób możemy uzyskać dostęp ColorRed
kolor zasobu z anywere w naszej aplikacji. Ale czekaj, nie chcemy zarażać tego małego pliku wszystkimi zasobami naszej aplikacji! Więc robimy MergedDictionaries
3. Scalone słowniki
Prawie zwykle rzeczy są nieco bardziej złożone i aby wspierać skalowalność, powinniśmy je rozdzielić. Możemy więc zdefiniować różne pliki zawierające różne słowniki zasobów, tj. Zasoby dla motywów kontrolek interfejsu użytkownika, zasoby dla tekstów itd., A następnie scalimy je wszystkie razem w pliku App.xaml.
Fragment z App.xaml
<Application x:Class="MyNewApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" RequestedTheme="Dark"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Assets/Themes/GeneralStyles.xaml"/> <ResourceDictionary Source="/Assets/Themes/TemplatedControls.xaml"/> <ResourceDictionary Source="/Assets/Strings/Texts.xaml"/> <ResourceDictionary Source="/Assets/Strings/ErrorTexts.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
Możesz utworzyć nowy plik słownika, klikając prawym przyciskiem myszy folder zasobów [Dodaj -> Nowy element]
4. Dostęp do zasobów
Musimy teraz uzyskać dostęp do naszych zadeklarowanych zasobów, aby to zrobić z kodu XAML, używamy {ThemeResource ResourceKey}
lub {StaticResource ResourceKey}
to be continued later.