<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一切正常,为什么?
答案 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
。这样,您仍然可以使用继承和样式来覆盖全局文本大小。