设置页面的背景颜色与样式

时间:2016-08-31 13:01:24

标签: xaml xamarin xamarin.forms

我在App.xaml中定义了以下显式样式:

<Application.Resources>
    <ResourceDictionary>
      <Style TargetType="ContentPage" x:Key="PageStyle">
        <Setter Property="BackgroundColor" Value="#ff0000" />
      </Style>
    </ResourceDictionary>
</Application.Resources>

我想要显示的页面嵌入到NavigationPage中,并且派生自ContentPage。它有以下隐式样式,而这里使用ContentPage而不是我的派生类型(实际上我使用派生类型,但我尝试了它没有,我有相同的效果):

<ContentPage.Resources>
    <ResourceDictionary>
      <Style TargetType="ContentPage" BasedOn="{StaticResource PageStyle}" />
    </ResourceDictionary>
</ContentPage.Resources>

但页面的背景并没有改变。它始终显示平台的默认背景颜色。如果我使用Button的样式,则应用样式。我使用NavigationPageContentPagePageVisualElement进行了尝试,但背景始终是默认背景。

如果我用

明确设置颜色
<ContentPage.BackgroundColor>
    <Color>Red</Color>
</ContentPage.BackgroundColor>

this.BackgroundColor = Color.Red;

应用颜色。

3 个答案:

答案 0 :(得分:12)

您可以全局分配,您必须将ApplyToDerivedTypes设置为true。这是一个例子:

<Style TargetType="ContentPage" ApplyToDerivedTypes="True">
    <Setter Property="BackgroundColor" Value="#4A4A4A" />
</Style>

现在继承ContentPage的所有类都将具有此背景颜色。

答案 1 :(得分:2)

将样式应用于您的ContentPage,如下所示:

<ContentPage (...) Style="{StaticResource PageStyle}">

答案 2 :(得分:0)

我认为这种行为的原因是SomePage(在我的情况下)是ContentPage的子类。我发现在documentation for implicit styles

  

但是,Style不适用于CustomEntry实例,它是一个子类条目

因此隐式样式不适用于子类。但每个页面都是ContentPage的子类。您只能使用Michał Ż中的解决方案。