设置全局字体系列

gcs*_*cso 8 wpf xaml

可能重复:
如何设置wpf应用程序的默认字体?

来自Web开发背景我经常对如何为控件分配样式感到困惑.我想做的是为整个应用程序设置一个全局字体系列.

在我的App.xaml文件中,我有以下内容

    <Style TargetType="{x:Type Window}">
        <Setter Property="FontFamily" Value="Helvetica, Arial" />
        <Setter Property="FontSize" Value="13" />
    </Style>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将目标类型更改为Control但是没有做任何事情.我希望,因为从技术上讲Window,一切都在一个控制中,一切都会按预期工作.

原来TextBlock控件不继承Control.我认为这是问题的主要原因,因为90%的文字都在TextBlock表格中.

在CSS中我会做这样的事情:

body {
    font-family: Helvetica, Arial;
    font-size: 13px;
    }
Run Code Online (Sandbox Code Playgroud)

Cod*_*ior 14

我之前做的是创建一个Style for Control,然后从中派生出其他控件样式.无论出于何种原因,WPF不希望直接从Control样式中获取FontFamily设置,但如果它从基于Control的Button Style中获取,则它可以工作.如果我稍后会有一些时间,我会挖掘并找到之前的实现.

编辑:
不记得我在哪里放了一个现成的例子,所以我做了一个:

<Style x:Key="ControlStyle" TargetType="Control">
    <Setter Property="FontFamily" Value="Wingdings"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource ControlStyle}"/>
Run Code Online (Sandbox Code Playgroud)

另外,请记住,TextBlock的样式不能基于Control.Textblock派生自Framework元素,而不是Control.标签,复选框,文本框等派生自Control,它派生自Framework Element.

您可能必须为Textblock设置单独的样式.您可以做的一件事是设置字体系列资源并将顶级样式绑定到该资源.然后,如果它改变了,你所要做的就是改变那个实例.

<FontFamily x:Key="DefaultFont" >Ravie</FontFamily>

<Setter Property="FontFamily" Value="{DynamicResource DefaultFont}"/>
Run Code Online (Sandbox Code Playgroud)