【发布时间】:2010-11-10 06:43:14
【问题描述】:
WPF 应用程序的默认字体系列是什么?这个系统依赖吗?我在我的系统上找到了 Tahoma。
如果我创建一个控件,那么控件的默认字体系列设置是什么?
【问题讨论】:
WPF 应用程序的默认字体系列是什么?这个系统依赖吗?我在我的系统上找到了 Tahoma。
如果我创建一个控件,那么控件的默认字体系列设置是什么?
【问题讨论】:
“默认”字体是您当前操作系统的当前系统字体。 Tahoma 是 Windows XP 的默认系统字体,在 Vista、Windows 7 上是 Segoe UI。
【讨论】:
在 Windows 8 上,后备字体似乎是 Segoe UI,基线为 0.9,行距为 1.2。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:clr="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<clr:String x:Key="someText">The quick brown fox, ABCD, 1234567890, /@#</clr:String>
<SolidColorBrush x:Key="lightColor">#bbbbbb</SolidColorBrush>
<SolidColorBrush x:Key="darkColor">#000000</SolidColorBrush>
<FontFamily x:Key="default">non existent font</FontFamily>
<FontFamily x:Key="segoe">Segoe UI</FontFamily>
<FontFamily x:Key="segoe_base" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
Baseline="0.9"
LineSpacing="1.2">
<FontFamily.FamilyNames>
<s:String x:Key="en-US" >Baseline Segoe UI</s:String>
</FontFamily.FamilyNames>
<FontFamily.FamilyMaps>
<FontFamilyMap Target="Segoe UI" />
</FontFamily.FamilyMaps>
</FontFamily>
</Page.Resources>
<StackPanel Margin="10" Width="250">
<TextBlock TextWrapping="Wrap">Segoe UI with a baseline of 0.9 and line spacing of 1.2 lines up with the default font</TextBlock>
<Grid Margin="5">
<TextBlock Foreground="{StaticResource darkColor}" TextWrapping="Wrap" FontSize="20" FontFamily="{StaticResource default}" Text="{StaticResource someText}"/>
<TextBlock Foreground="{StaticResource lightColor}" TextWrapping="Wrap" FontSize="20" FontFamily="{StaticResource segoe_base}" Text="{StaticResource someText}"/>
</Grid>
<TextBlock Margin="0,10,0,0" TextWrapping="Wrap">Segoe UI with the default baseline and line spacing does not line up with the default font</TextBlock>
<Grid Margin="5">
<TextBlock Foreground="{StaticResource darkColor}" TextWrapping="Wrap" FontSize="20" FontFamily="{StaticResource default}" Text="{StaticResource someText}"/>
<TextBlock Foreground="{StaticResource lightColor}" TextWrapping="Wrap" FontSize="20" FontFamily="{StaticResource segoe}" Text="{StaticResource someText}"/>
</Grid>
</StackPanel>
</Page>
【讨论】:
SystemFonts.MessageFontFamily静态属性。因此,如果您需要在应用程序的某个地方使用它 - 您应该从那里读取它,而不是自己构建新的 FontFamily 实例。
您可以从默认值DependencyProperty 中获取它。例如,您创建自定义控件,该控件将使用 DrawingContext 绘制文本,并且您想为 FontFamily 设置默认值,您可以这样声明DependencyProperty:
public static readonly DependencyProperty FontFamilyProperty = DependencyProperty.Register(nameof(FontFamily), typeof(FontFamily), typeof(MyControl), new FrameworkPropertyMetadata(TextBlock.FontFamilyProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.AffectsRender));
public FontFamily FontFamily
{
get => (FontFamily)GetValue(FontFamilyProperty);
set => SetValue(FontFamilyProperty, value);
}
【讨论】: