【发布时间】:2020-12-27 14:34:14
【问题描述】:
我已经从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-Bold 和Roboto-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>
我在设计器中包含了应用程序的图像。
请注意,某些 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 中使用了哪些字体。
关于如何清理这个烂摊子有什么建议吗?
【问题讨论】:
-
在示例图像中,默认字体看起来与 Roboto 非常相似。如果您在某个时候重新运行它,也许使用 Times 或类似的更清晰的东西,只是为了更容易地将它们区分开来?抱歉,虽然我无法回答您的实际问题:(
-
我认为如果字体名称相同,您可以通过
FontWeight属性访问更多选项
标签: wpf xaml fonts truetype roboto