如何设置TextBox
的默认字体?
对于TextBlock
它(取自here):
TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
尝试对TextBox
执行相同操作:
TextBox.FontFamilyProperty.OverrideMetadata(typeof(TextBox),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
将抛出:
抛出异常:' System.Windows.Markup.XamlParseException'在PresentationFramework.dll
中附加信息:System.Windows.Controls.TextBox'的类型初始值设定项。抛出一个例外。 PropertyMetadata已经注册了类型' TextBox'。
这是repro:
<StackPanel>
<TextBlock Text="123123" />
<TextBox Text="123123" BorderThickness="0" Padding="-2,0,-2,0" />
</StackPanel>
在窗口构造函数(TextBlock
之前)中设置InitializeComponent()
字体如上所述。如何设置TextBox
默认字体(默认为我的Segoe)?我需要一个解决方案,在一个地方将"Verdana"
设置为整个应用程序。
智能感知显示:
答案 0 :(得分:2)
您可以将TextBox
更改为TextBoxBase
。不知何故,它对我有用。
TextBoxBase.FontFamilyProperty.OverrideMetadata( typeof( TextBoxBase ),
new FrameworkPropertyMetadata( new FontFamily( "Verdana" ) ) );
答案 1 :(得分:1)
对于整个应用程序,您可以在App.xaml中设置它:
<Application.Resources>
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="Verdana" />
<Setter Property="FontSize" Value="50"></Setter>
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Verdana" />
<Setter Property="FontSize" Value="100"></Setter>
</Style>
</Application.Resources>
对于单个文件,您可以在Window或UserResource开启标记后的XAML中设置:
<Window.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Verdana" />
</Style>
</Window.Resources>
如果它是&#39; UserControl&#39;,请替换“&#39; Window&#39;使用&#39; UserControl&#39; - 你明白了。
您的基本格式如下:
<Window x:Class="WpfApplicationTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Verdana" />
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<TextBlock Text="123123" />
<TextBox Text="123123" BorderThickness="0" Padding="-2,0,-2,0" />
</StackPanel>
</Grid>
</Window>
祝你好运!
答案 2 :(得分:0)
我的问题不是单独设置TextBox
样式(抱歉有误导性),而是将其与TextBlock
一起设置。
问题似乎与那些控件没有共同基类来继承FontFamilyProperty
有关。 TextBox
从TextBoxBase
和TextBlock
中获取一个。尝试在窗口(窗口)或窗口xaml后面的任何一个代码中设置两者都会导致异常或者没有异常(两者都不会工作)。
技巧是将它设置在应用程序资源中,不要问我原因,但它可以正常工作(并适用于所有内容):
<Application.Resources>
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="Verdana" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Verdana" />
</Style>
<!-- not sure if this make sense -->
<Style TargetType="TextElement">
<Setter Property="FontFamily" Value="Verdana" />
</Style>
</Application.Resources>
以下也有效(感谢@bars222's answer):
// font overrides
TextElement.FontFamilyProperty.OverrideMetadata(typeof(TextElement),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));
Control.FontFamilyProperty.OverrideMetadata(typeof(TextBoxBase),
new FrameworkPropertyMetadata(new FontFamily("Verdana")));