UWP如何在不丢失其他属性定义的情况下覆盖样式属性?

5

我创建了一个UWP应用程序并定义了一些样式,如下所示:

<Style TargetType="TextBlock" >
<Setter Property="Foreground" Value="Orange" />
<Setter Property="Margin" Value="12" />
<Setter Property="FontSize" Value="18" />

所以,我所有的TextBlock都是橙色的,并且有12px的边距。一切正常。但现在我想为标题定义第二个样式,它应该继承基本样式并仅覆盖额外定义的属性,就像这样:
  <Style x:Key="HeadlineStyle" TargetType="TextBlock">    
<Setter Property="FontSize" Value="32" />

但如果我这样做,所有其他样式定义都会消失(没有边距,没有颜色)。

那么我该如何保留基本样式?

在WPF中,我可以使用x:Type属性,只需说

BasedOn="{StaticResource  {x:Type Button}}"

但是在UWP中,x:Type不可用(我发现它已不再受支持)。


1
给你的自定义样式命名,然后创建一个空的默认样式 BasedOn(基于)它(以及任意数量的其他样式)。基本上,从当前方法中切换事项。 - Peter Torr - MSFT
@PeterTorr-MSFT 可以将其作为答案并提供更多信息。虽然我相信这可能是另一个问题的重复,但只是没有找到一个例子。 - Chris W.
你的意思是这样的吗?<Style TargetType="TextBlock" BasedOn="{StaticResource BasicTextBlockStyle}" /> 它没有起作用。 - Marco Rehmer
1个回答

5

这个功能完全达到了您的要求:

<Grid.Resources>
  <Style TargetType="TextBlock" x:Key="medium">
    <Setter Property="Foreground" Value="Orange"/>
    <Setter Property="FontSize" Value="20"/>
  </Style>
  <Style TargetType="TextBlock" BasedOn="{StaticResource medium}">
    <Setter Property="FontSize" Value="10"/>
  </Style>
  <Style TargetType="TextBlock" x:Key="bigger" BasedOn="{StaticResource medium}">
    <Setter Property="FontSize" Value="30"/>
  </Style>
</Grid.Resources>
<StackPanel>
  <TextBlock Text="normal"/>
  <TextBlock Text="medium" Style="{StaticResource medium}"/>
  <TextBlock Text="bigger" Style="{StaticResource bigger}"/>
</StackPanel>
  • 第一个 TextBlock 是 10-px 橙色的
  • 第二个 TextBlock 是 20-px 橙色的
  • 第三个 TextBlock 是 30-px 橙色的

好的,谢谢你的示例。我按照你的样例重新编辑了我的代码,现在它可以工作了。 - Marco Rehmer

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