WPF - 按字体名称访问 Roboto 字体时出现问题
Posted
技术标签:
【中文标题】WPF - 按字体名称访问 Roboto 字体时出现问题【英文标题】:WPF - Problem accessing Roboto fonts by font name 【发布时间】: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
属性访问更多选项
【参考方案1】:
我在我的 ASDF1 TextBlock 下方添加了另一个 TextBlock,但字体和文本不同。 我能够看到一些不同。 所以字体确实有效。 谢谢@UuDdLrLrSs。
Roboto-Bold
和 Roboto-Regular
有相同的字体名称还是很奇怪。
【讨论】:
以上是关于WPF - 按字体名称访问 Roboto 字体时出现问题的主要内容,如果未能解决你的问题,请参考以下文章