避免在所有页面中引用样式 - Xamarin.Forms

Avoid to refer styles in all pages - Xamarin.Forms

我正在开发适用于移动跨平台的 Xamarin Forms 应用程序。 我找到了如何以这种方式将样式应用到我的页面和控件:

Styles/HeaderStyle.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="App.HeaderStyle">
    <Style x:Key="Header" TargetType="StackLayout">
        <Setter Property="Orientation" Value="Horizontal"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="BackgroundColor" Value="Green"/>
    </Style>
</ResourceDictionary>

Views/Page.xaml

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="App.HomePage"
    xmlns:local="clr-namespace:App;"
    NavigationPage.HasNavigationBar="false">
    <ContentPage.Resources>
        <ResourceDictionary MergedWith="local:HeaderStyle">
        </ResourceDictionary>
    </ContentPage.Resources>
    <!-- Some other page content -->
</ContentPage>

我对这个实现有一些疑问: - 我不知道如何添加多个样式文件 - 我必须将样式文件引用添加到所有页面

我试过用这样的方式在 App.xaml 中添加引用

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="theme:Resources1"/>
    <ResourceDictionary Source="theme:Resources2"/>
</ResourceDictionary.MergedDictionaries>

但是没有成功。

如果您有随处使用的样式,可以将它们放在 global style

在您的 App.xaml 中,您可以像现在一样定义 ResourceDictionary。例如:

<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>

然后在您的页面中您应该能够引用它们而无需声明字典的合并,如下所示:

<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>

如果要覆盖样式,可以通过在该页面中声明样式来实现,层次结构中较低的样式优先于较高的样式。 您也可以选择不在样式上添加 x:Key 属性以使其隐式显示。这样你就不必在控件上声明 Style 属性。