首页 > 解决方案 > Xamarin 共享资源:全局样式和标记扩展

问题描述

在设置全局属性时,在应用程序(或页面)级别使用 aXAML Markup Extension而不是标签是否有优势?Style

语境:

在“XAML Basics”文档中,他们给出了以下示例:

ORIGINAL

 <Button Text="Do this!"
                HorizontalOptions="Center"
                VerticalOptions="CenterAndExpand"
                BorderWidth="3"
                Rotation="-15"
                TextColor="Red"
                FontSize="24" />

... OTHER SIMILAR BUTTONS ...

CLEAN

<ContentPage.Resources>
    <ResourceDictionary>
        <LayoutOptions x:Key="horzOptions"
                       Alignment="Center" />

        <LayoutOptions x:Key="vertOptions"
                       Alignment="Center"
                       Expands="True" />

         <x:Double x:Key="borderWidth">
            3
         </x:Double>

        <x:Double x:Key="rotationAngle">-15</x:Double>
    </ResourceDictionary>
</ContentPage.Resources>

<Button Text="Do this!"
        HorizontalOptions="{StaticResource horzOptions}"
        VerticalOptions="{StaticResource vertOptions}"
        BorderWidth="{StaticResource borderWidth}"
        Rotation="{StaticResource rotationAngle}"
        TextColor="{StaticResource textColor}"
        FontSize="{StaticResource fontSize}" />

在 Style 的文档中,他们给出了以下示例:

RESOURCE DICTIONARY CONTAINING BUTTON STYLE set in App.cs
<Application.Resources>
        <ResourceDictionary>
            <Style x:Key="buttonStyle" TargetType="Button">
                <Setter Property="HorizontalOptions" Value="Center" />
                <Setter Property="VerticalOptions" Value="CenterAndExpand" />
                <Setter Property="BorderColor" Value="Lime" />
                <Setter Property="BorderRadius" Value="5" />
                <Setter Property="BorderWidth" Value="5" />
                <Setter Property="WidthRequest" Value="200" />
                <Setter Property="TextColor" Value="Teal" />
            </Style>
        </ResourceDictionary>
    </Application.Resources>

BUTTON WITH STYLE APPLIED IN A ContentPage

<Button Text="These buttons" Style="{StaticResource buttonStyle}" />

显然它们在句法上相似,但第二种方法不那么冗长,那么第一种方法的意义何在?

标签: xamlxamarinxamarin.forms

解决方案


显然,根据文档,它们是不同的定义。

XAML 标记扩展

XAML 标记扩展构成 XAML 中的一项重要功能,它允许将属性设置为从其他来源间接引用的对象或值。XAML 标记扩展对于共享对象和引用整个应用程序中使用的常量特别重要,但它们在数据绑定中发现了它们的最大效用。

Xamarin.Forms 中的全局样式

通过将样式添加到应用程序的资源字典中,可以使样式全局可用。这有助于避免跨页面或控件的样式重复。

您会看到XAML Markup Extensions的范围大于Global Styles,但是Global Styles只是Styles of Resource的一种特殊用途。


推荐阅读