我在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
的样式,则应用样式。我使用NavigationPage
,ContentPage
,Page
,VisualElement
进行了尝试,但背景始终是默认背景。
如果我用
明确设置颜色<ContentPage.BackgroundColor>
<Color>Red</Color>
</ContentPage.BackgroundColor>
或
this.BackgroundColor = Color.Red;
应用颜色。
答案 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ł Ż中的解决方案。