Xaml 使用样式设置页面的背景色

Xaml 使用样式设置页面的背景色,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我在App.xaml中定义了以下显式样式: <Application.Resources> <ResourceDictionary> <Style TargetType="ContentPage" x:Key="PageStyle"> <Setter Property="BackgroundColor" Value="#ff0000" /> </Style> </Resour

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

<Application.Resources>
    <ResourceDictionary>
      <Style TargetType="ContentPage" x:Key="PageStyle">
        <Setter Property="BackgroundColor" Value="#ff0000" />
      </Style>
    </ResourceDictionary>
</Application.Resources>
但是页面的背景没有改变。它始终显示平台的默认背景色。如果我将样式用于
按钮
,则会应用该样式。我用
NavigationPage
ContentPage
Page
VisualElement
尝试过,但背景始终是默认背景

如果我显式地将颜色设置为

<ContentPage.BackgroundColor>
    <Color>Red</Color>
</ContentPage.BackgroundColor>

已应用颜色。

将样式应用于内容页,如下所示:

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

我认为这种行为的原因是
SomePage
(在我的例子中)是
ContentPage
的子类。我发现:

但是,该样式不应用于CustomEntry实例,它是一个子类条目


所以隐式样式不适用于子类。但是每个页面都是
ContentPage
中的一个子类。您只能使用中的解决方案。

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

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


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

强制性问题:背景未在设计器中设置?目前没有可用的设计器。只能使用XML或C#。换言之:BackgroundColor依赖项属性是否在XML或C#中的任何位置显式设置?BackgroundColor依赖项属性的确切含义是什么?我已经在应用程序级别(使用后台设置器)定义了一个样式,我希望在页面上使用它。在本例中,背景颜色是用XML设置的。这可能有助于主题。您知道为什么从显式样式转换为隐式样式对页面不起作用吗?遗憾的是,我不知道。如果不想在每个ContentPage上设置背景,请创建一个继承自ContentPage的新类,使用App.xaml中的样式在其xaml/构造函数中设置背景,然后使用该类而不是ContentPage。这有点天真,但如果最简单的解决方案不起作用,那么。。。这里有一个关于这种行为的页面,但可能最后一篇文章是你的:直截了当的回答。。。谢谢
<ContentPage (...) Style="{StaticResource PageStyle}">
<Style TargetType="ContentPage" ApplyToDerivedTypes="True">
    <Setter Property="BackgroundColor" Value="#4A4A4A" />
</Style>