![]() |
魁梧的小蝌蚪 · 正则匹配堆栈异常---java笔记_itey ...· 1 年前 · |
![]() |
微醺的荔枝 · Ajax请求携带Cookie_51CTO博客 ...· 1 年前 · |
![]() |
爽快的哑铃 · 陆奇深圳演讲(附完整PPT下载)_工业_中国_建设· 2 年前 · |
![]() |
八块腹肌的大熊猫 · e(自然对数运算的底数) - 知乎· 2 年前 · |
我正在创建一个WPF应用程序,我想知道最好的方式,能够改变每个元素的ui字体大小。是否创建资源字典并设置Styles来设置我使用的所有控件的字体大小?
最佳实践是什么?
对于WPF中的任何样式,都应该有一个单独的资源字典,其中包含应用程序的样式。
如果你想要一个可以在整个应用中重复使用的字体大小,那么只需为该字体大小创建一个样式即可。你可以给它一个唯一的名称/键来显式使用,或者你可以设置一个在整个应用程序中都可以使用的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" />
我会这样做:
<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“样式,其余的就会继承它。(这就是BasedOn属性,如果在继承的样式中创建其他setter,也可以扩展基本样式)
FontSizeProperty是从父控件继承的。所以你只需要改变你的主窗口的FontSize。
如果你不需要动态行为,这应该是可行的:
将窗口样式添加到ResourceDictionary
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize" Value="15" />
</Style>
将样式应用于主窗体(将不会隐式应用,因为它是派生类型)
Style = (Style)FindResource(typeof (Window));
如果您需要以编程方式更改全局FontSize,而不是静态的(XAML),以一次性应用于所有窗口,您可以这样做:
TextElement.FontSizeProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(16.0));
TextBlock.FontSizeProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(16.0));
此值适用于任何TextBlock、标签和几乎任何窗口中的任何文本,而它没有显式定义的FontSize。但这并不影响TextBox,您必须为它或任何其他特殊控件编写类似的代码。
另一种选择是将FontFamily和FontSize定义为资源。
<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>
这样你就可以在你的setter中使用它们。
Application.Current.MainWindow.FontSize = _appBodyFontSize;
这样,您还可以在运行时更改字体大小。
TextElement.FontSize
是一个继承属性,这意味着您可以简单地在根元素处设置字体大小,并且所有子元素都将使用该大小(只要您不手动更改它们)
<Window>
有一个属性FontSize。
因此,如果您想要更改该窗口中所有元素的字体大小,则可以在元素中设置所需的字体大小。
<Window FontSize="12">
</Window>
要使用ctrl-鼠标轮动态地全局更改字体大小,请执行以下操作:
XAML:
<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">
代码隐藏:
private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)