【问题标题】:WPF load font from ResourcesWPF 从资源中加载字体
【发布时间】:2018-09-08 02:21:19
【问题描述】:

所以在快速搜索后我找到了这个解决方案:

我的 Resources 文件夹里有一个名为 Abstract 的文件夹。

<Window.Resources>
   <Style x:Key="Abstract">
       <Setter Property="Label.FontFamily" Value="Resources/#Abstract" />
   </Style>
</Window.Resources>

还有我的Label

<Label Name="lblValue"
       Content="Value"                                
       Style="{DynamicResource Abstract}"
       FontSize="14"/>

什么也没发生,我只是看不到我想要的font

【问题讨论】:

标签: c# wpf fonts resources


【解决方案1】:

您需要注意内存泄漏。

任何使用相对路径的字体引用都会导致内存泄漏。 这样做的方法是使用绝对路径。 是的,这很麻烦。

看到这个: WPF TextBlock memory leak when using Font

我最近一直在研究使用花哨字体的东西并调查了这个问题。 .net 4.7 仍然存在。 如果您有多个使用相同 ttf 的应用程序,我不会使用临时文件夹,将您的 ttf 传送到与您的 exe 相同的文件夹或本地 appdata。

当我了解我们应用程序的这个特定方面时,我的计划是编写一个自定义标记扩展,它允许我传递一个短名称并在用户机器上查找绝对路径。我将使用 appdata。

您的直接问题是因为您没有使用相对路径。在你的路径前面放一个 /。

Value="/Resources/#Abstract"

但是你会有内存泄漏。

【讨论】:

  • 最后这项工作使用此链接:stackoverflow.com/questions/6453640/… 第一种方式 - 与应用程序打包,这也会导致内存泄漏?
  • 是的。避免它的唯一方法是拥有绝对路径。除非您使用的路径以“C:\...”之类的开头,否则会导致内存泄漏。
  • 绝对路径到底是什么?
  • 以“C:\”开头的路径是绝对路径。如果您的路径前面没有驱动器号,则它不是绝对的。
  • 我在您链接的那个线程中看到的所有路径都是相对的。 EG new FontFamily(new Uri("pack://application:,,,/ 是相对于你的应用的。你不能把它们放到文件管理器中找到文件。
猜你喜欢
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 2022-01-19
  • 2011-12-07
  • 2022-01-14
相关资源
最近更新 更多