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

5

我在 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;

颜色已应用。


强制问题:设计师中没有设置背景吗? - Manfred Radlwimmer
目前没有可用的设计师。您只能使用XML或C#。 - testing
在你的 XML 或 C# 中是否明确设置了 BackgroundColor 依赖属性? - Manfred Radlwimmer
“BackgroundColor Dependency Property”是什么意思?我在应用程序级别上定义了一个样式(带有背景设置器),我想在页面上使用它。在这种情况下,背景颜色是在XML中设置的。 - testing
1
可以帮忙解决这个主题吗?(https://forums.xamarin.com/discussion/34798/how-to-add-global-background-color-style) - Yehor Hromadskyi
@EgorGromadskiy:我之前看到过这个,但是我找到的信息还没有帮助到我。 - testing
3个回答

20

如果要全局分配它,你必须将ApplyToDerivedTypes设置为true。这是一个示例:

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

现在,所有继承ContentPage的类都将拥有这个背景颜色。


1
直截了当的回答...谢谢。 - Joel Hernandez
这是最好的答案。 - Innova

2
将样式应用于 ContentPage,可以按照以下方式进行:
<ContentPage (...) Style="{StaticResource PageStyle}">

1
你知道为什么将显式样式转换为隐式样式在页面上不起作用吗? - testing
很遗憾,我不知道。如果您不想在每个ContentPage上设置背景,则可以创建一个新类继承自ContentPage,在其xaml/构造函数中使用来自App.xaml的样式设置背景,然后使用此类代替ContentPage。这有点天真,但如果最简单的解决方案不起作用,那么... 这是一个具有此行为的页面,但最后一篇帖子可能是您的:https://bugzilla.xamarin.com/show_bug.cgi?id=27659 - Michał Żołnieruk

0

我认为这种行为的原因是 SomePage(在我的情况下)是从 ContentPage 派生的子类。我在 隐式样式文档 中发现了这一点:

但是,样式不适用于 CustomEntry 实例,它是 Entry 的子类

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接