【问题标题】:UWP override style properties without loosing other property definitionsUWP 覆盖样式属性而不丢失其他属性定义
【发布时间】:2016-02-24 14:39:21
【问题描述】:

我创建了一个 UWP 应用并定义了一些这样的样式:

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

所以,我所有的 TextBlock 都是橙色的,并且有 12px 的边距。一切都好。但是现在我想为 Headlines 定义第二种样式,它应该继承基本样式并覆盖额外定义的属性,如下所示:

  <Style x:Key="HeadlineStyle" TargetType="TextBlock">    
<Setter Property="FontSize" Value="32" />

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

那么我怎样才能保持基本风格呢?

在 WPF 中,我可以使用 x:Type 属性然后说

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

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

【问题讨论】:

  • 为您的自定义样式命名,然后创建一个空的默认样式,即BasedOn it(以及任意数量的其他样式)。基本上改变你目前的方法。
  • @PeterTorr-MSFT 也可以作为答案并给他们更多信息。虽然我确定这可能与某个地方的另一个问题重复,只是没有找到示例。
  • 你的意思是这样的吗? &lt;Style TargetType="TextBlock" BasedOn="{StaticResource BasicTextBlockStyle}" /&gt; 没用

标签: c# xaml win-universal-app


【解决方案1】:

这正是你想要的:

<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 像素橙色
  • 第二个 TextBlock 是 20 像素橙色
  • 第三个 TextBlock 是 30-px 橙色

【讨论】:

  • 好的,谢谢你的例子。我像您的示例一样重新编辑了我的代码,现在它可以工作了。
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多