Хорошо, что вы ищете: ResourceDictionaries
Ресурсы XAML - это определения объектов, которые можно использовать совместно и повторно использовать в приложении Xamarin.Forms.Эти объекты ресурсов хранятся в словаре ресурсов.
A ResourceDictionary
- хранилище ресурсов, используемых приложением Xamarin.Forms.Типичные ресурсы, которые хранятся в ResourceDictionary, включают в себя стили, шаблоны элементов управления, шаблоны данных, цвета и конвертеры.
В XAML ресурсы, которые хранятся в ResourceDictionary
, могут затем извлекаться и применяться к элементам с помощьюрасширение разметки StaticResource
.В C#
ресурсы также могут быть определены в ResourceDictionary
, а затем извлечены и применены к элементам с использованием индексатора на основе строк.Однако использование ResourceDictionary
в C#
дает мало преимуществ, поскольку общие объекты можно просто сохранить как fields
или properties
и получить к ним прямой доступ без необходимости сначала извлекать их из dictionary
.
Создание и использование ResourceDictionary
Resources
определены в ResourceDictionary
, для которого затем устанавливается одно из следующих свойств ресурсов:
- Свойство Resources любого класса, производного от Application.
- Свойство Resources любого класса, производного от VisualElement
Программа Xamarin.Forms
содержит только один класс, производный от Application
, но часто использует множество классов, производных от VisualElement
, включая страницы, макеты и элементы управления.Для любого из этих объектов его свойство Resources может иметь значение ResourceDictionary
.Выбор места для конкретного воздействия ResourceDictionary
, где могут использоваться ресурсы:
Ресурсы в ResourceDictionary
, который прикреплен к представлению, например Button
или Label
может применяться только к этому конкретному объекту, поэтому это не очень полезно.
Resources
в ResourceDictionary
, прикрепленном к макету, например StackLayout
или Grid
canприменяется к макету и ко всем дочерним элементам этого макета.
Ресурсы в ResourceDictionary
, определенные на уровне страницы, могут применяться к странице и ко всем ее дочерним элементам.
Ресурсы в ResourceDictionary
, определенные на уровне приложения, могут применяться во всем приложении.
В следующем XAML показаны ресурсы, определенные на уровне приложенияResourceDictionary
в файле App.xaml
, созданном как часть стандартной программы Xamarin.Forms:
<Application ...>
<Application.Resources>
<ResourceDictionary>
<Color x:Key="PageBackgroundColor">Yellow</Color>
<Color x:Key="HeadingTextColor">Black</Color>
<Color x:Key="NormalTextColor">Blue</Color>
<Style x:Key="LabelPageHeadingStyle" TargetType="Label">
<Setter Property="FontAttributes" Value="Bold" />
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="TextColor" Value="{StaticResource HeadingTextColor}" />
</Style>
</ResourceDictionary>
</Application.Resources>
Начиная с Xamarin.Forms
3.0, явные теги ResourceDictionary
не являютсятребуется.Объект ResourceDictionary
создается автоматически, и вы можете вставить ресурсы непосредственно между тегами элемента свойства Resources:
<Application ...>
<Application.Resources>
<Color x:Key="PageBackgroundColor">Yellow</Color>
<Color x:Key="HeadingTextColor">Black</Color>
<Color x:Key="NormalTextColor">Blue</Color>
<Style x:Key="LabelPageHeadingStyle" TargetType="Label">
<Setter Property="FontAttributes" Value="Bold" />
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="TextColor" Value="{StaticResource HeadingTextColor}" />
</Style>
</Application.Resources>
Каждый ресурс имеет ключ, указанный с помощью x: Ключевой атрибут, который становится ключом словаря в ResourceDictionary
.Ключ используется для извлечения ресурса из ResourceDictionary
с помощью расширения разметки StaticResource
, как показано в следующем примере кода XAML, который показывает дополнительные ресурсы, определенные в StackLayout
:
<StackLayout Margin="0,20,0,0">
<StackLayout.Resources>
<ResourceDictionary>
<Style x:Key="LabelNormalStyle" TargetType="Label">
<Setter Property="TextColor" Value="{StaticResource NormalTextColor}" />
</Style>
<Style x:Key="MediumBoldText" TargetType="Button">
<Setter Property="FontSize" Value="Medium" />
<Setter Property="FontAttributes" Value="Bold" />
</Style>
</ResourceDictionary>
</StackLayout.Resources>
<Label Text="ResourceDictionary Demo" Style="{StaticResource LabelPageHeadingStyle}" />
<Label Text="This app demonstrates consuming resources that have been defined in resource dictionaries."
Margin="10,20,10,0"
Style="{StaticResource LabelNormalStyle}" />
<Button Text="Navigate"
Clicked="OnNavigateButtonClicked"
TextColor="{StaticResource NormalTextColor}"
Margin="0,20,0,0"
HorizontalOptions="Center"
Style="{StaticResource MediumBoldText}" />
</StackLayout>
Дляболее подробную информацию любезно смотрите здесь