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

时间:2017-04-03 12:19:36

标签: xamarin xamarin.forms resourcedictionary mergeddictionaries

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

样式/ 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>

查看/ 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>

但没有成功。

1 个答案:

答案 0 :(得分:2)

如果您有到处使用的样式,可以将它们放在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属性。