我想在我的应用程序中使用自定义主题,据我所知,可以通过使用资源字典并在App.xaml中引用它来实现。样式会像这样覆盖默认值:
我希望在我的应用程序中使用自定义主题。根据我的了解,我可以通过使用资源字典并在App.xaml中引用它来实现。样式会覆盖默认值,如下所示:
<Style TargetType="{x:Type Label">
<Setter Property="Foreground" Value="Green" />
</Style>
我猜默认的标签样式已被相同值覆盖,但是所有我的标签字体都是绿色的。当我想要再次在某个地方设计一个标签时,问题就开始了。当我想要像这样更改网格中的其他属性时:
<Grid.Resources>
<Style TargetType="{x:Type Label">
<Setter Property="FontSize" Value="28" />
</Style>
</Grid.Resources>
我的网格中所有标签的前景颜色都失效了,又变成默认的了(难道我在之前的步骤中没有覆盖默认值吗?)。经过一些尝试后,我发现我需要在Style
声明中再添加一个属性BasedOn={StaticResource {x:Type Label}}
,这样才能正确地实现。对于我来说,这有点奇怪,因为现在我将不得不在整个应用程序中重复相同的BasedOn代码,而这不是样式工作的方式-这应该是自动完成的!例如,在HTML + CSS中,样式是继承和合并的,在WPF中则被替换...
请注意,当我不使用任何样式时,控件仍然会从某个地方获取它们的外观(系统主题?)。我如何告诉它们在其他地方查找默认值,以便在样式上没有任何附加代码的情况下,它们会认为它们应该是默认的绿色?
有没有办法自动设置BasedOn属性?或者有更好的方法来解决这个问题吗?