c# - WPF:当字体存储在 DLL 中时,如何在我的 EXE 中显示自定义字体
问题描述
在我的解决方案中,我有两个项目:
Main
是 WPF 可执行文件。Lib
是一个 WPF 用户控件库。
Lib设置为对Main的引用。
在库中
有两个文件夹:
Views
,包含 UserControlMyView
。Fonts
,包含字体MyFont.ttf
。
我已将MyFont.ttf包含到Lib中并将其设置BuildAction
为Resource
.
这是MyView的 XAML 代码:
<UserControl x:Class="Lib.Views.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Lib.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style x:Key="Foo">
<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Fonts/#MyFont" />
</Style>
</UserControl.Resources>
<TextBlock Text="asdf" Style="{StaticResource Foo}" />
<TextBlock Text="asdf" />
</UserControl>
注意:有两个 TextBlocks 用于比较。
结果
在 MyView 的设计器中,第一个 TextBlock 具有我想要的字体。伟大的!
在主要
在我的MainWindow.xaml
我有这个代码来显示MyView:
<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:lib="clr-namespace:Lib.Views;assembly=Lib"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<lib:MyView />
</Grid>
</Window>
结果
在 MainWindow 的设计器和运行时;MyView中第一个 TextBlock 的字体没有正确的字体。相反,它具有默认字体,就像MyView中的第二个 TextBlock 一样。
问题
我认为这必须这样做MyFont没有完全/正确地嵌入到Lib中,因此Main不能正确获取字体。
这个设置可能有什么问题?
解决方案
推荐阅读
- java - 我可以将 Infinispan 配置为在特定缓存上使用 JavaSerializationMarshaller() 并在其他缓存上使用 protobufs 吗?
- python - 检查 df1 列是否包含 df2 列字符串
- javascript - 如何制作一个有区别的数组的副本?
- sql - “使用”条款不在 Postgresql 中工作?
- angular - Angular Ant design (NG ZORRO) 表添加排序不起作用
- android - 如何在angular8上添加拉动刷新
- mongodb - 使用 ML Kit 在 Flutter 中进行人脸识别
- c# - 如何使用 Random.Range 的答案将最大值设置为相同的 Random.Range,直到达到 1
- c++ - 在 C++ 中分配真或假的随机对象
- c++ - 从内部范围访问阴影变量