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.
