提问者:小点点

在WPF中使用来自app.xaml的静态资源时更改所有UI元素的字体大小


我需要改变整个应用程序的所有文本的字体大小。

我试过按以下方式做,但没有用:-

<Style x:Key="fontsize" TargetType="{x:Type FrameworkElement}">
    <Setter Property="Control.FontSize" Value="20"/>
</Style>
<Style TargetType="{x:Type FrameworkElement}" BasedOn="{StaticResource fontsize}"/>

当我尝试如下设置时,它可以正常工作,但不能应用于所有元素&; 需要将其应用于所有不同类型的元素。

<Style TargetType="TextBlock" BasedOn="{StaticResource fontsize}"/>
<Style TargetType="TextBox" BasedOn="{StaticResource fontsize}"/>
<Style TargetType="DataGridCell" BasedOn="{StaticResource fontsize}"/>
<Style TargetType="MenuItem" BasedOn="{StaticResource fontsize}"/>
<Style TargetType="DatePicker" BasedOn="{StaticResource fontsize}"/>

我还想问一下,有没有一种方法可以覆盖特定元素的全局样式,比如用户控件上的标题文本应该有不同的大小?


共3个答案

匿名用户

在app.xaml中

        <Style TargetType="TextBlock">
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>

匿名用户

在app.xaml中为窗口创建全局样式。

    <Application.Resources>
        <Style x:Key="WindowStyle" TargetType="{x:Type Window}">
            <Setter Property="FontStyle" Value="Italic" />
            <Setter Property="FontSize" Value="24" />
            <Setter Property="Foreground" Value="Green"/>
        </Style>
    </Application.Resources>

并为所需窗口设置该样式。

<Window x:Class="YourNamespace.MainWindow"  Style="{StaticResource WindowStyle}".....>

用于重写usercontrol的样式

           <local:UserControl1>
                <local:UserControl1.Style>
                    <Style TargetType="UserControl">
                        <Setter Property="FontSize" Value="10"/>
                    </Style>
                </local:UserControl1.Style> 
            </local:UserControl1>

匿名用户

这涉及到两个控制。 你可能在想“嘿,这个单元格或者那个日历怎么样”。 它们的模板在TextBlock中显示文本。 当您在menuitem上设置Header或在label上设置content时,将生成一个textblock。

因此,您“只”需要在textblock和TextBox上设置样式:

    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="20"/>
            </Style>
            <Style TargetType="TextBox">
                   <Setter Property="FontSize" Value="20"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

话虽如此。

就像克莱门斯指出的那样。

字体大小和样式依赖属性被标记为继承,因此如果您只有mainwindow,那么您可以在上面设置。

当您设置内容时,标签中包含一个textblock,这并不是“显而易见”的。 类似地,menuitem和Header。 因此,我认为值得张贴这个答案。