WPF-按字体名称访问Roboto字体时遇到问题

问题描述

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

  • Roboto Bold
  • Roboto Medium
  • Roboto Regular

但是我在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>

我已经在设计器中包含了应用程序的图像。

enter image description here

请注意,某些TextBlocks的字体有所不同。 这些变化是我无法理解的。

  • asdf1:似乎已被Roboto字体更改。如果这是Roboto-Bold或Roboto-Regular,则未知。

  • asdf2:似乎保持不变。

  • asdf3:自然与asdf1相同。

  • asdf4:我尝试使用Roboto Bold,但没有用。

  • asdf5:出于某种原因,Roboto Medium可以工作。但是没有名称Roboto Medium的字体文件

  • asdf6:我尝试使用Roboto Regular,但是没有用。

  • asdf7:仅供比较。似乎与asdf2asdf4asdf6相同。

这是如此令人困惑。 我确定我使用正确的语法来引用XAML代码中的字体文件。但是由于字体名称看起来不太可靠,所以我不确定我的TextBlocks中使用了哪种字体。

关于如何清除此混乱的任何建议?

解决方法

我添加了另一个TextBlock,下面是我的ASDF1 TextBlock,但是没有Font和相同的Text。 我能够看到一些区别。 因此,字体实际上可以工作。 谢谢@UuDdLrLrSs。

奇怪的是,Roboto-BoldRoboto-Regular具有相同的字体名称。