【发布时间】:2016-04-04 12:56:02
【问题描述】:
如何为TextBox 设置默认字体?
对于TextBlock,它是(取自here):
TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
尝试对TextBox 做同样的事情:
TextBox.FontFamilyProperty.OverrideMetadata(typeof(TextBox),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
将抛出:
抛出异常:PresentationFramework.dll 中的“System.Windows.Markup.XamlParseException”
附加信息:“System.Windows.Controls.TextBox”的类型初始化程序引发了异常。 PropertyMetadata 已为“TextBox”类型注册。
这里是重现:
<StackPanel>
<TextBlock Text="123123" />
<TextBox Text="123123" BorderThickness="0" Padding="-2,0,-2,0" />
</StackPanel>
在窗口构造函数中设置TextBlock 字体如上(InitializeComponent() 之前)有效。如何设置TextBox 默认字体(我默认是 Segoe)?我需要一种解决方案,将其设置为 "Verdana" 在一个地方用于整个应用程序。
智能感知显示:
【问题讨论】:
-
为一种框架类型(例如 TextBlock)调用 OverrideMetadata 无论如何都是可疑的。您应该通过样式设置默认值。
-
我尝试设置
TextElement它对任何事情都不起作用。设置TextBlock一个有效,但仅适用于TextBlock。 -
你试过
OverrideMetadata(Type, PropertyMetadata, DependencyPropertyKey)版本和DependencyPropertyKey -
@bars222,不明白你的意思。你能写出一整行代码吗?
-
@Clemens,如何设置适用于(
TextBox或TextBlock)相同字体的样式?请参阅@Kiel's answer,它有效,但仅适用于一个(绝不适用于两者)。他们有FrameworkElement基类,但它不包含FontFamilyProperty。
标签: c# wpf fonts textbox code-behind