【问题标题】:What is the default font family of a WPF application?WPF 应用程序的默认字体系列是什么?
【发布时间】:2010-11-10 06:43:14
【问题描述】:

WPF 应用程序的默认字体系列是什么?这个系统依赖吗?我在我的系统上找到了 Tahoma

如果我创建一个控件,那么控件的默认字体系列设置是什么?

【问题讨论】:

    标签: .net wpf


    【解决方案1】:

    “默认”字体是您当前操作系统的当前系统字体。 Tahoma 是 Windows XP 的默认系统字体,在 Vista、Windows 7 上是 Segoe UI。

    【讨论】:

    • 这是您键入的默认字体,但不是 UI 的字体(即 Word 的菜单和按钮中使用的字体)。
    • 对 Windows 8 有任何想法吗?
    【解决方案2】:

    在 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 实例。
    【解决方案3】:

    您可以从默认值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);
        }
    

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 2017-01-24
      • 2019-12-30
      • 2011-03-09
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多