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,你必须为它或任何其他特殊控件编写类似的代码。