uwp
Ресурсы в UWP (StaticResource / ThemeResource) и ResourceDictionary
Поиск…
Вступление
В новых приложениях Windows 10 существует много способов ссылки на ресурс внутри кода XAML или кода. Прежде всего, вы должны объявить ресурсы в каком-то доступном месте. Легкий способ - объявить ResourceDictionary
в контексте, скажем, на текущей странице.
1. Словарь ресурсов
Фрагмент из 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. Глобальные ресурсы
Ресурсные словари доступны только внутри контекста, который был объявлен, поэтому, если мы планируем ссылаться на ресурсы, объявленные в одном контексте страницы с другой страницы, они не будут найдены. Поэтому, если нам нужны глобальные ресурсы, которые будут определены как те, которые поставляются с каркасом, мы делаем это в App.xaml
Сниппет из 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>
Таким образом, мы можем получить доступ ColorRed
цветному ресурсу ColorRed из любого приложения в нашем приложении. Но подождите, мы не хотим заражать этот маленький файл всеми ресурсами нашего приложения! Итак, мы делаем MergedDictionaries
3. Объединенные словари
Практически обычно вещи немного сложнее, и для поддержки масштабируемости мы должны разделить вещи друг от друга. Таким образом, мы можем определить различные файлы, содержащие различные словари ресурсов, то есть ресурсы для тем оформления элементов управления пользовательского интерфейса, ресурсы для текстов и т. Д., Затем мы объединим их все вместе в файле App.xaml.
Сниппет из 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>
Вы можете создать новый файл словаря, щелкнув правой кнопкой мыши папку «Активы» [Добавить -> Новый элемент]
4. Доступ к ресурсам
Теперь нам нужно получить доступ к объявленным ресурсам, чтобы сделать это из кода XAML, который мы используем {ThemeResource ResourceKey}
или {StaticResource ResourceKey}
to be continued later.