2

我已经从dafunt.com下载了 Roboto 字体。在我的应用程序中,我需要使用三种 Roboto 字体:

  • Roboto 粗体
  • 机器人中号
  • Roboto 常规

但我无法确定如何在我的 WPF 应用程序中通过字体名称访问正确的字体。如果我在 Window 的Character map应用程序中打开每个字体文件,我可以看到我认为的字体名称。这些是:

File-name             Font name
===============================
Roboto-Bold.ttf       Roboto
Roboto-Medium.ttf     Roboto Lt
Roboto-Regular.ttf    Roboto

注意Robot-BoldRoboto-Regular具有相同的字体名称

所以我对如何在我的 WPF 应用程序中访问正确的字体感到困惑。

在我的 Visual Studio 项目中,我创建了一个名为Fonts. 这三个字体文件放在那个文件夹中,字体文件包含在我的项目中。每个字体文件的Build Action设置为Resource

XAML 代码

<Window x:Class="Main.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Main"
    xmlns:fa="http://schemas.fontawesome.io/icons/"
    mc:Ignorable="d"
    Loaded="Window_Loaded"
    Title="MainWindow" Height="450" Width="800">

    <Window.Resources>
        <Style x:Key="RobotoBold">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto" />
        </Style>
        <Style x:Key="RobotoMedium">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto Lt" />
        </Style>
        <Style x:Key="RobotoRegular">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto" />
        </Style>

        <Style x:Key="RobotoBoldV2">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto Bold" />
        </Style>
        <Style x:Key="RobotoMediumV2">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto Medium" />
        </Style>
        <Style x:Key="RobotoRegularV2">
            <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#Roboto Regular" />
        </Style>
    </Window.Resources>

    <StackPanel Orientation="Vertical">
        <TextBlock Text="asdf1" Style="{StaticResource RobotoBold}" />
        <TextBlock Text="asdf2" Style="{StaticResource RobotoMedium}" />
        <TextBlock Text="asdf3" Style="{StaticResource RobotoRegular}" />
        <Separator Height="6" Visibility="Hidden" />
        <TextBlock Text="asdf4" Style="{StaticResource RobotoBoldV2}" />
        <TextBlock Text="asdf5" Style="{StaticResource RobotoMediumV2}" />
        <TextBlock Text="asdf6" Style="{StaticResource RobotoRegularV2}" />
        <Separator Height="6" Visibility="Hidden" />
        <TextBlock Text="asdf7" />
    </StackPanel>
</Window>

我在 Designer 中包含了应用程序的图像。

在此处输入图像描述

请注意,某些 TextBlock 的字体有一些变体。这些变化是我无法理解的。

  • asdf1:似乎已经被字体 Roboto 改变了。这是 Roboto-Bold 还是 Roboto-Regular 未知。

  • asdf2:似乎没有改变。

  • asdf3:自然是一样的asdf1

  • asdf4:我试过了,Roboto Bold但没有用。

  • asdf5:由于某种原因Roboto Medium有效。但是没有名称为Roboto Medium.

  • asdf6:我试过了,Roboto Regular但没有用。

  • asdf7:只是为了比较。似乎与asdf2,asdf4和的字体相同asdf6

这太令人困惑了。我确定我使用正确的语法来引用 XAML 代码中的字体文件。但由于字体名称似乎不太可靠,我不确定我的 TextBlocks 中使用了哪些字体。

关于如何清除这个烂摊子的任何建议?

4

1 回答 1

0

我在我的 ASDF1 TextBlock 下方添加了另一个 TextBlock,但字体和文本不同。我能够看到一些不同。所以字体确实有效。谢谢@UuDdLrLrSs。

仍然很奇怪,Roboto-Bold并且Roboto-Regular具有相同的字体名称。

于 2020-09-10T07:34:05.213 回答