【问题标题】:Change FontFamily for all elements更改所有元素的 FontFamily
【发布时间】:2015-05-13 09:03:20
【问题描述】:

是否有一种简单快捷的方法可以在我的应用程序中更改所有元素(文本块、文本框等)的 FontFamily?

我使用 ModernUI,它定义了很多漂亮的样式。我最好不要手动更改这些。像这样设置 FontFamily 应用程序

public MainWindow()
{
    ...
    this.FontFamily = new FontFamily("Comic Sans MS");
}

没有效果。我也在我的 App.xaml 中尝试过这个

       <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontFamily" Value="Comic Sans MS"/>
        </Style>

它改变了一些元素的字体,但不是全部。例如,如果在元素上设置了诸如 {StaticResource Small} 之类的样式,则通过 App.xaml 更改字体无效。

【问题讨论】:

  • 你试过在窗口上设置字体系列吗?
  • 是的,我有。不幸的是,它没有任何效果。
  • IMO,如果你在控制级别覆盖样式就没有意义

标签: c# wpf


【解决方案1】:

因为 FontFamily 是 TextBlock 和其他控件的不同属性:

TextBlock : FrameworkElement
Control : FrameworkElement

并且它们每个都有自己的 FontFamily 属性,所以你必须为TextBlock设置样式,为Control设置另一个样式。

 <Style TargetType="{x:Type TextBlock}">
     <Setter Property="FontFamily" Value="Comic Sans MS"/>
 </Style>

 <Style TargetType="{x:Type Control}">
     <Setter Property="FontFamily" Value="Comic Sans MS"/>
 </Style>

【讨论】:

  • Reza,这仅适用于某些元素。例如,如果 TextBlock 使用 ModernUI 中的另一种样式,例如 所以我想我必须调整所有使用的样式
  • @peter,您必须使用 BasedOn="{StaticResource Heading2}" 的自定义样式覆盖 ModernUI 样式,并为 TextBlocks 使用您的自定义样式。
【解决方案2】:

您需要搜索“DefaultFontFamily”,因为它指向themes of ModernUI 中使用的字体。

【讨论】:

  • 但如果他在控件上覆盖它,他将不会应用新样式,因为此样式将覆盖他的全局样式。
  • 会覆盖 DefaultFontFamily 工作吗? (我试过但没有,但这并不意味着它不起作用;o)´Comic Sans MS-->´
  • @peter 我想是的。我不熟悉 ModernUI,但总的来说,集中这些东西并使用主题等是一种很好的做法,因此您只需在一个地方更改这些东西。