Xamarin.Forms 中的设备样式

Xamarin.Forms 在 Device.Styles 类中包括六种动态样式(称为设备样式)。

设备样式为:

所有六种样式只能应用于 Label 实例。 例如,显示段落正文的 Label 可能会将其 Style 属性设置为 BodyStyle

以下代码示例演示如何在 XAML 页面中使用设备样式:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.DeviceStylesPage" Title="Device" IconImageSource="xaml.png">
    <ContentPage.Resources>
        <ResourceDictionary>
            <Style x:Key="myBodyStyle" TargetType="Label"
              BaseResourceKey="BodyStyle">
                <Setter Property="TextColor" Value="Accent" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <Label Text="Title style"
              Style="{DynamicResource TitleStyle}" />
            <Label Text="Subtitle text style"
              Style="{DynamicResource SubtitleStyle}" />
            <Label Text="Body style"
              Style="{DynamicResource BodyStyle}" />
            <Label Text="Caption style"
              Style="{DynamicResource CaptionStyle}" />
            <Label Text="List item detail text style"
              Style="{DynamicResource ListItemDetailTextStyle}" />
            <Label Text="List item text style"
              Style="{DynamicResource ListItemTextStyle}" />
            <Label Text="No style" />
            <Label Text="My body style"
              Style="{StaticResource myBodyStyle}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

设备样式必然要使用 DynamicResource 标记扩展。 通过更改“辅助功能”设置来调整文本大小,可以在 iOS 中看到样式的动态性质。 每个平台上的设备样式看起来都不一样,如以下屏幕截图所示:

每个平台上的设备样式

还可以通过将 BaseResourceKey 属性设置为设备样式的键名称来派生设备样式。 在上面的代码示例中,myBodyStyle 继承自 BodyStyle 并会设置强调文本颜色。 有关动态样式继承的详细信息,请参阅动态样式继承

以下代码示例展示了 C# 中的等效页面:

public class DeviceStylesPageCS : ContentPage
{
    public DeviceStylesPageCS ()
    {
        var myBodyStyle = new Style (typeof(Label)) {
            BaseResourceKey = Device.Styles.BodyStyleKey,
            Setters = {
                new Setter {
                    Property = Label.TextColorProperty,
                    Value = Color.Accent
                }
            }
        };

        Title = "Device";
        IconImageSource = "csharp.png";
        Padding = new Thickness (0, 20, 0, 0);

        Content = new StackLayout {
            Children = {
                new Label { Text = "Title style", Style = Device.Styles.TitleStyle },
                new Label { Text = "Subtitle style", Style = Device.Styles.SubtitleStyle },
                new Label { Text = "Body style", Style = Device.Styles.BodyStyle },
                new Label { Text = "Caption style", Style = Device.Styles.CaptionStyle },
                new Label { Text = "List item detail text style",
                  Style = Device.Styles.ListItemDetailTextStyle },
                new Label { Text = "List item text style", Style = Device.Styles.ListItemTextStyle },
                new Label { Text = "No style" },
                new Label { Text = "My body style", Style = myBodyStyle }
            }
        };
    }
}

每个 Label 实例的 Style 属性都设置为 Device.Styles 类中的相应属性。

辅助功能

设备样式将遵循辅助功能的首选项,因此字体大小将随着每个平台上辅助功能首选项的更改而变化。 因此,若要支持可访问的文本,请确保将设备样式用作应用程序中任何文本样式的基础。

以下屏幕截图演示了可访问字体最小时每个平台上的设备样式:

每个平台上的无障碍访问小型设备样式

以下屏幕截图演示了可访问字体最大时每个平台上的设备样式:

每个平台上的无障碍访问大型设备样式