Как создать константы для использования в Xamarin.Forms XML - PullRequest
0 голосов
/ 27 ноября 2018

Как разработчик Android, я привык работать с @dimen/ -константами в XML для Android.Я считаю это будущее полезным, потому что оно позволяет мне легко менять несколько мест, которые должны иметь одинаковую длину пикселя вместе.

Имеет ли Xamarin.Forms аналогичные функции, которые я могу использовать?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Хорошо, что вы ищете: ResourceDictionaries

Ресурсы XAML - это определения объектов, которые можно использовать совместно и повторно использовать в приложении Xamarin.Forms.Эти объекты ресурсов хранятся в словаре ресурсов.

A ResourceDictionary - хранилище ресурсов, используемых приложением Xamarin.Forms.Типичные ресурсы, которые хранятся в ResourceDictionary, включают в себя стили, шаблоны элементов управления, шаблоны данных, цвета и конвертеры.

В XAML ресурсы, которые хранятся в ResourceDictionary, могут затем извлекаться и применяться к элементам с помощьюрасширение разметки StaticResourceC# ресурсы также могут быть определены в 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>

Дляболее подробную информацию любезно смотрите здесь

0 голосов
/ 28 ноября 2018

Помимо StaticResource, как упомянуто выше, есть еще 2 способа сделать это.

Первый способ - иметь статический класс для констант и ссылаться на них в XAML.

public static class GlobalSetting
{
    public static double ImageRotation { get { return 180; } }
}

В Xaml вам необходимо добавить это пространство имен в директиву страницы,

xmlns:gb="clr-namespace:XXXX.StaticData"

и использовать константу в коде xaml, как показано ниже,

<Image Source="icon_back.png" Rotation="{x:Static gb:GlobalSetting.BackImageRotation}" HeightRequest="24" </Image>

Второй подход - иметь постоянный параметр в BaseViewModel и связывать их в коде Xaml.

0 голосов
/ 27 ноября 2018

Мне кажется, что вы хотите определить константы / стили в ResourceDictionary:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/resource-dictionaries.

В ResourceDictionary вы можете определить свои константы / стили по ключу, в вашем XAML вызатем можно ссылаться на них следующим образом:

  Color={StaticResource MyColorFromDictionary}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...