为什么在Window上添加TextElement样式时按钮fontsize无效

时间:2017-06-06 06:50:57

标签: wpf styles

<Window.Resources>
    <Style TargetType="{x:Type TextElement}">
        <Setter Property="FontSize" Value="50"/>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel Orientation="Vertical" Grid.Column="0" >

        <Button Click="ButtonBase_OnClick" x:Name="qq">xxx</Button>
        <Button>xxx</Button>
        <Button>xxx</Button>
    </StackPanel>
</Grid>

上面的代码

据我所知,Button的FontSize是来自TextElement的DP,但为什么这段代码没有效果?

 <Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="FontSize" Value="50"/>
    </Style>
</Window.Resources>

如果我将TextElement更改为Button一切正常,为什么?

2 个答案:

答案 0 :(得分:0)

Button不同,TextElement不是Control。它不从System.Windows.Control类继承而且没有ControlTemplate,因此隐式样式不会被应用。有关此内容的更多信息,请参阅以下链接。

https://blogs.msdn.microsoft.com/wpfsdk/2009/08/27/implicit-styles-templates-controls-and-frameworkelements/ Implicit styles in Application.Resources vs Window.Resources?

如果要定义全局文本样式,可以向TextBlock添加隐式App.xaml样式:

<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp2"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontSize" Value="50"/>
        </Style>
    </Application.Resources>
</Application>

答案 1 :(得分:0)

您遇到的问题是,属性继承(来自Button控件)的优先级低于样式设置器(来自Style中的Application)。

请查看MSDN上的Dependency Property Value Precedence页面,以获取所有优先级的排序列表。

要设置全局文字大小,您应该在FontSize上设置MainWindow。这样,您仍然可以使用继承和样式来覆盖全局文本大小。