Чтобы не захламлять разметку xaml определением ресурсов, особенно когда этих ресурсов много, их можно выносить в отдельные файлы и при необходимости подключать.
Если подобные ресурсы представляют стили, то по умолчанию в проекте .NET MAUI уже имеется для хранения таких файлов каталог Resources/Styles. Можно использовать эту папку,
можно создать другую, учитывая, что ресурсы не сводятся только к стилям. Но в данном случае для примера для хранения своих ресурсов создадим в проекте новую папку, которую назовем
MyResources
. Добавим в нее два xaml-файла, которые назовем GreenButtonStyle.xaml и BlueButtonStyle.xaml
Для создания словарей ресурсов Visual Studio предоставляет встроенный шаблон .NET MAUI ResourceDictionary (XAML):
Но в реальности можно просто добавить текстовые файлы с расширением .xaml
.
Если мы воспользовались шаблоном .NET MAUI ResourceDictionary (XAML) для добавления файлов, то по умолчанию вместе с файлами xaml Visual Studio добавляет связанные
с этими файлами файлы с кодом C#, которые в данном случае называются GreenButtonStyle.xaml.cs
и BlueButtonStyle.xaml.cs
и которые призваны содержать некоторую связанную с инициализацией словарей логику.
Они в данном случае не нужны, поэтому удалим их.
В файле GreenButtonStyle.xaml определим стиль зеленой кнопки:
<?xml version="1.0" encoding="utf-8" ?> <ResourceDictionary xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> <Style x:Key="greenButtonStyle" TargetType="Button"> <Setter Property="TextColor" Value="#004D40" /> <Setter Property="BackgroundColor" Value="#80CBC4" /> <Setter Property="Margin" Value="10" /> </Style> </ResourceDictionary>
Здесь в словаре ресурсов определен один ресурс - стиль с ключом "greenButtonStyle", но естественно при необходимости мы можем определить и другие ресурсы.
В файле BlueButtonStyle.xaml определим стиль синей кнопки:
<?xml version="1.0" encoding="utf-8" ?> <ResourceDictionary xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> <Style x:Key="blueButtonStyle" TargetType="Button"> <Setter Property="TextColor" Value="#01579B" /> <Setter Property="BackgroundColor" Value="#81D4FA" /> <Setter Property="Margin" Value="10" /> </Style> </ResourceDictionary>
Здесь в словаре ресурсов определен ресурс с ключом "blueButtonStyle". Теперь подключим эти ресурсы на страницу в коде xaml:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <ContentPage.Resources> <ResourceDictionary Source="MyResources/GreenButtonStyle.xaml" /> <ResourceDictionary Source="MyResources/BlueButtonStyle.xaml" /> </ContentPage.Resources> <StackLayout Padding="20"> <Button Text="iOS" Style="{StaticResource blueButtonStyle}" /> <Button Text="Android" Style="{StaticResource greenButtonStyle}" /> </StackLayout> </ContentPage>
Для подключения внешних ресурсов в коллекцию ресурсов страницы добавляются словари ресурсов - элементы ResourceDictionary. У каждого словаря устанавливается атрибут Source, который указывает на расположение файла ресурсов.
Для теста на странице определены две кнопки, которые используют подключенные ресурсы
Подобным образом можно подключать словари ресурсов не только на страницу, но и в другие элементы.