WPF全局字体大小

我正在创build一个WPF应用程序,我想知道能够更改UI中每个元素的字体大小的最佳方法。 我是否创build资源字典并设置样式来设置我使用的所有控件的字体大小?

最佳做法是什么?

我会这样做:

<Window.Resources> <Style TargetType="{x:Type Control}" x:Key="baseStyle"> <Setter Property="FontSize" Value="100" /> </Style> <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style> <!-- ComboBox, RadioButton, CheckBox, etc... --> </Window.Resources> 

这样,如果我想改变所有的控件,我只需要改变“baseStyle”风格,其余的只是inheritance它。 (这就是那些BasedOn属性的那些,如果你在inheritance的样式里面创build其他的setter,你也可以扩展基本样式)

FontSizeProperty从父控件inheritance。 所以你只需要改变你的主窗口的FontSize。

如果你不需要dynamic行为,这应该工作:

为Window添加样式到您的ResourceDictionary

 <Style TargetType="{x:Type Window}"> <Setter Property="FontSize" Value="15" /> </Style> 

将样式应用到主表单(不会因为其派生types而被隐式应用)

  Style = (Style)FindResource(typeof (Window)); 

另一种select是将FontFamily和FontSize定义为资源。

 <FontFamily x:Key="BaseFontFamily">Calibri</FontFamily> <sys:Double x:Key="BaseFontSize">12</sys:Double> 

这样你可以在你的设置器中使用它们。

<Window>有一个FontSize属性。

所以你可以在元素中设置所需的字体大小,如果你想改变该窗口内的所有元素的字体大小。

 <Window FontSize="12"> </Window> 
 Application.Current.MainWindow.FontSize = _appBodyFontSize; 

这样,您也可以在运行时更改字体大小。

对于WPF中的任何样式,您应该有一个单独的资源字典,其中包含您的应用程序的样式。

如果您想要在整个应用程序中重复使用单个字体大小,则只需创build该字体大小的样式即可。 你可以给它一个唯一的名字/键明确使用,或者你可以设置一个targetType将超越整个应用程序。

显式键:

 <Style x:Key="MyFontSize" TargetType="TextBlock"> <Setter Property="FontSize" Value="10" /> </Style> <Control Style="{StaticResource MyFontSize}" /> 

*请注意,这种风格可以用于具有contentPresenters的控件

对于应用中的所有文本块:

 <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="10" /> </Style> <TextBlock Text="This text will be size 10" /> 

TextElement.FontSize是一个inheritance属性,这意味着你可以简单地设置根元素的字体大小,所有的子元素将使用这个大小(只要你不手动改变它们)

如果您需要以编程方式更改全局FontSize,而不是静态(XAML),则可以对所有窗口应用一次:

 TextElement.FontSizeProperty.OverrideMetadata( typeof(TextElement), new FrameworkPropertyMetadata(16.0)); TextBlock.FontSizeProperty.OverrideMetadata( typeof(TextBlock), new FrameworkPropertyMetadata(16.0)); 

此值适用于任何TextBlock,Labels和几乎任何窗口中的任何文本,但它没有定义明确的FontSize。 但是,这不会影响TextBox,你必须为它或任何其他特殊控件编写类似的代码。