Xamarin.Forms 用户界面——控件——Style——全局样式

全局样式

PDF用于离线使用
示例代码:
相关文章:
相关API:

让我们知道你对此的感受

最后更新:2016年2月

通过将样式添加到应用程序的资源字典,可以在全球范围内提供样式。这有助于避免在页面或控件之间重复样式。

在XAML中创建全局样式

默认情况下,从模板创建的所有Xamarin.Forms应用程序使用App类来实现Application子类。要Style在应用程序级别声明,在应用程序ResourceDictionary使用XAML中,默认的App类必须被替换为XAML App类和关联的代码隐藏。有关详细信息,请参阅使用应用程序类

以下代码示例显示了Style在应用程序级别声明的代码示例:

<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.App">
    <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>
</Application>

ResourceDictionary定义了一个单一的显式样式,buttonStyle它将用于设置Button实例的外观。然而,全局样式可以是显式的隐式的

以下代码示例显示了应用于buttonStyle页面Button实例的XAML页面:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ApplicationStylesPage" Title="Application" Icon="xaml.png">
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <Button Text="These buttons" Style="{StaticResource buttonStyle}" />
            <Button Text="are demonstrating" Style="{StaticResource buttonStyle}" />
            <Button Text="application style overrides" Style="{StaticResource buttonStyle}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

这将导致以下屏幕截图中显示的外观:

有关在页面中创建样式的信息ResourceDictionary,请参阅显式样式隐式样式

覆盖样式

视图层次结构中较低的样式优先于定义较高的样式。例如,将Style设置Button.TextColorRed应用程序级别的设置将被设置Button.TextColor为的页面级别风格覆盖Green。类似地,页面级风格将被控件级风格覆盖。另外,如果Button.TextColor直接设置在一个控件属性上,这将优先于任何样式。此优先级在以下代码示例中进行了说明:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ApplicationStylesPage" Title="Application" Icon="xaml.png">
    <ContentPage.Resources>
        <ResourceDictionary>
            <Style x:Key="buttonStyle" TargetType="Button">
                ...
                <Setter Property="TextColor" Value="Red" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <StackLayout.Resources>
                <ResourceDictionary>
                    <Style x:Key="buttonStyle" TargetType="Button">
                        ...
                        <Setter Property="TextColor" Value="Blue" />
                    </Style>
                </ResourceDictionary>
            </StackLayout.Resources>
            <Button Text="These buttons" Style="{StaticResource buttonStyle}" />
            <Button Text="are demonstrating" Style="{StaticResource buttonStyle}" />
            <Button Text="application style overrides" Style="{StaticResource buttonStyle}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

buttonStyle在应用程序级定义的原始文件被buttonStyle页级别定义的实例覆盖。此外,页面级别的样式被控制级别覆盖buttonStyle。因此,Button实例将显示为蓝色文本,如以下屏幕截图所示:

在C#中创建全局风格

Style实例可以Resources通过创建一个新的C#添加到C#中的应用程序的集合中ResourceDictionary,然后通过将Style实例添加到ResourceDictionary,如下面的代码示例所示:

public class App : Application
{
    public App ()
    {
        var buttonStyle = new Style (typeof(Button)) {
            Setters = {
                ...
                new Setter { Property = Button.TextColorProperty,   Value = Color.Teal }
            }
        };

        Resources = new ResourceDictionary ();
        Resources.Add ("buttonStyle", buttonStyle);
        ...
    }
    ...
}

构造函数定义了一个应用于整个应用程序中的实例的显式样式Button显式 Style实例被添加到ResourceDictionary使用该Add方法,指定一个key字符串来引用该Style实例。然后,Style实例可以应用于应用程序中正确类型的任何控件。然而,全局样式可以是显式的隐式的

以下代码示例显示了应用于buttonStyle页面Button实例的C#页面:

public class ApplicationStylesPageCS : ContentPage
{
    public ApplicationStylesPageCS ()
    {
        ...
        Content = new StackLayout {
            Children = {
                new Button { Text = "These buttons", Style = (Style)Application.Current.Resources ["buttonStyle"] },
                new Button { Text = "are demonstrating", Style = (Style)Application.Current.Resources ["buttonStyle"] },
                new Button { Text = "application styles", Style = (Style)Application.Current.Resources ["buttonStyle"]
                }
            }
        };
    }
}

buttonStyle被施加到Button通过设置它们的实例Style的属性,并控制的外观Button实例。

概要

通过将样式添加到应用程序中,样式可以在全球范围内使用ResourceDictionary。这有助于避免在页面或控件之间重复样式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值