Явные стили в Xamarin.Forms

Явный стиль — это стиль, который выборочно применяется к элементам управления, задав их свойства стиля.

Создание явного стиля в XAML

Чтобы объявить на Style уровне страницы, ResourceDictionary необходимо добавить на страницу, а затем в него можно включить ResourceDictionaryодно или несколько Style объявлений. Объект Style делается явным путем предоставления его объявления x:Key атрибута, который дает ему описательный ключ в ResourceDictionary. Затем явные стили должны применяться к определенным визуальным элементам, задав их Style свойства.

В следующем примере кода показаны явные стили, объявленные в XAML, в страницах и примененные к экземплярам страницы ResourceDictionaryLabel :

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ExplicitStylesPage" Title="Explicit" IconImageSource="xaml.png">
    <ContentPage.Resources>
        <ResourceDictionary>
            <Style x:Key="labelRedStyle" TargetType="Label">
                <Setter Property="HorizontalOptions"
                        Value="Center" />
                <Setter Property="VerticalOptions"
                        Value="CenterAndExpand" />
                <Setter Property="FontSize" Value="Large" />
                <Setter Property="TextColor" Value="Red" />
            </Style>
            <Style x:Key="labelGreenStyle" TargetType="Label">
                ...
                <Setter Property="TextColor" Value="Green" />
            </Style>
            <Style x:Key="labelBlueStyle" TargetType="Label">
                ...
                <Setter Property="TextColor" Value="Blue" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <Label Text="These labels"
                   Style="{StaticResource labelRedStyle}" />
            <Label Text="are demonstrating"
                   Style="{StaticResource labelGreenStyle}" />
            <Label Text="explicit styles,"
                   Style="{StaticResource labelBlueStyle}" />
            <Label Text="and an explicit style override"
                   Style="{StaticResource labelBlueStyle}"
                   TextColor="Teal" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Определяет ResourceDictionary три явных стиля, применяемых к экземплярам страницы Label. Каждый Style используется для отображения текста в другом цвете, а также настройки размера шрифта и горизонтального и вертикального макета. Каждый из них Style применяется к другому Label , задав свойства Style с помощью расширения разметки StaticResource . Результат показан на следующих снимках экрана:

Пример явных стилей

Кроме того, финал Label применяется Style к нему, но также переопределяет TextColor свойство на другое Color значение.

Создание явного стиля на уровне элемента управления

Помимо создания явных стилей на уровне страницы, их также можно создать на уровне элемента управления, как показано в следующем примере кода:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ExplicitStylesPage" Title="Explicit" IconImageSource="xaml.png">
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <StackLayout.Resources>
                <ResourceDictionary>
                    <Style x:Key="labelRedStyle" TargetType="Label">
                      ...
                    </Style>
                    ...
                </ResourceDictionary>
            </StackLayout.Resources>
            <Label Text="These labels" Style="{StaticResource labelRedStyle}" />
            ...
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

В этом примере явные Style экземпляры назначаются Resources коллекции StackLayout элемента управления. Затем стили можно применить к элементу управления и его дочерним элементам.

Сведения о создании стилей в приложении ResourceDictionaryсм. в разделе "Глобальные стили".

Создание явного стиля в C#

Style Экземпляры можно добавить в коллекцию страниц Resources в C# путем создания нового ResourceDictionaryэкземпляра, а затем путем добавления Style экземпляров в ResourceDictionaryколлекцию, как показано в следующем примере кода:

public class ExplicitStylesPageCS : ContentPage
{
    public ExplicitStylesPageCS ()
    {
        var labelRedStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Red    }
            }
        };
        var labelGreenStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Green }
            }
        };
        var labelBlueStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Blue }
            }
        };

        Resources = new ResourceDictionary ();
        Resources.Add ("labelRedStyle", labelRedStyle);
        Resources.Add ("labelGreenStyle", labelGreenStyle);
        Resources.Add ("labelBlueStyle", labelBlueStyle);
        ...

        Content = new StackLayout {
            Children = {
                new Label { Text = "These labels",
                            Style = (Style)Resources ["labelRedStyle"] },
                new Label { Text = "are demonstrating",
                            Style = (Style)Resources ["labelGreenStyle"] },
                new Label { Text = "explicit styles,",
                            Style = (Style)Resources ["labelBlueStyle"] },
                new Label {    Text = "and an explicit style override",
                            Style = (Style)Resources ["labelBlueStyle"], TextColor = Color.Teal }
            }
        };
    }
}

Конструктор определяет три явных стиля, которые применяются к экземплярам страницы Label . Каждый явныйStyle добавляется в ResourceDictionary метод с помощью Add метода, указывая key строку для ссылки на Style экземпляр. Каждый из них Style применяется к другому Label , задав их Style свойства.

Тем не менее, нет никакого ResourceDictionary преимущества использовать здесь. Вместо этого Style экземпляры можно назначить непосредственно Style свойствам обязательных визуальных элементов и удалить их ResourceDictionary , как показано в следующем примере кода:

public class ExplicitStylesPageCS : ContentPage
{
    public ExplicitStylesPageCS ()
    {
        var labelRedStyle = new Style (typeof(Label)) {
            ...
        };
        var labelGreenStyle = new Style (typeof(Label)) {
            ...
        };
        var labelBlueStyle = new Style (typeof(Label)) {
            ...
        };
        ...
        Content = new StackLayout {
            Children = {
                new Label { Text = "These labels", Style = labelRedStyle },
                new Label { Text = "are demonstrating", Style = labelGreenStyle },
                new Label { Text = "explicit styles,", Style = labelBlueStyle },
                new Label { Text = "and an explicit style override", Style = labelBlueStyle,
                            TextColor = Color.Teal }
            }
        };
    }
}

Конструктор определяет три явных стиля, которые применяются к экземплярам страницы Label . Каждый Style используется для отображения текста в другом цвете, а также настройки размера шрифта и горизонтального и вертикального макета. Каждый из них Style применяется к другому Label , задав его Style свойства. Кроме того, финал Label применяется Style к нему, но также переопределяет TextColor свойство на другое Color значение.