gpt4 book ai didi

c# - Visual Studio 设计器不显示嵌入式字体

转载 作者:太空狗 更新时间:2023-10-29 23:06:47 26 4
gpt4 key购买 nike

我在我的 C# WPF .NET 4.0 应用程序(特别是 Open Sans 和 FontAwesome)中使用了一些自定义字体和 Visual Studio 2013。

我有:

  1. 在/Fonts 下将 FontAwesome.otf 和 OpenSans-Regular.ttf 添加到我的项目(不是链接)。
  2. 确保两种字体都设置为“Resource”。
  3. 在本地安装了两种字体 (Windows 8.1)。
  4. 在我的资源词典中创建了新样式(其中包含许多其他内容,因此我相信它可以正常工作)。
  5. 重新启动 VS2013。

这是我在资源词典中创建的样式的片段:

<Style x:Key="OpenSans">
<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Fonts/#Open Sans" />
</Style>

<Style x:Key="FontAwesome">
<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Fonts/#FontAwesome" />
</Style>

现在,在我创建的一个新的用户控件中,我纯粹为了测试设计器和正确包含这些字体,我编写了以下 XAML:

    <TextBlock Style="{StaticResource FontAwesome}" FontSize="64" Text="&#xf085;" />
<TextBlock Style="{StaticResource OpenSans}" FontSize="48" Text="the quick brown fox jumped over the lazy dog." />
<TextBlock FontFamily="Open Sans" FontSize="48" Text="the quick brown fox jumped over the lazy dog." />

FontAwesome 在设计器中运行,在我的 PC 和另一台未安装 FoneAwesome 的 PC 上运行。

OpenSans 样式不会显示在设计器中,但会在执行时显示,包括在另一台未安装 Open Sans 的 PC 上显示。

Open Sans FontFamily 选择显示在设计器中,但不会显示在另一台未安装 Open Sans 的 PC 上(预期)。

问题

我希望能够使用设计器在设计时查看 UI 在给定我正在使用的提供的字体的情况下的外观。利用我创建的样式,我能够在设计器中看到 FontAwesome 图标,但看不到 Open Sans 字体。我能说出两者之间的唯一区别是 FontAwesome 是一种 Open-Type 字体,而 Open Sans 是一种 True-Type 字体。

如果我忽略了一些简单的事情,或者 VS Designer 中的 OTF 和 TTF 之间是否存在模糊问题,有人知道吗?

最佳答案

发现与解决方案

我无法辨别为什么 Open Sans 没有在 VS Designer 中呈现。我为强制它使用 Open Sans(从附加到项目的字体资源)所做的每一次尝试都会失败,并且设计器会回退到默认字体。

使用与 FontAwesome 相同的方法可以按预期工作,因此 VS 中的字体渲染系统有一些我无法解释的元素。

但是,我想出了一个很好的(也许甚至更好?)解决方案,以及一个我不知道的有关 WPF 字体选择的提示:

WPF 中的 FontFamily 属性支持后备值,例如:

<Style x:Key="OpenSans">
<Setter Property="TextElement.FontFamily" Value="Open Sans, /<project name>;component/Fonts/#Open Sans" />
</Style>

请注意,此属性的值首先是“Open Sans”,然后是逗号后的项目中包含的字体的 URI。 (提醒一下,您需要确保字体资源在 Build Action Properties 下属于“Resource”类型(在 Solution Explorer 中右键单击字体文件。))

此语法通知 WPF 使用列出的第一个字体,如果不可用,则回退到第二个字体系列,依此类推。

这是(可能)更好的解决方案,因为它会询问系统所需的字体(在本例中为 Open Sans)是否已经可用。如果是,则使用该系统字体,如果不是,它将加载嵌入的字体文件资源。

这提供了一些好处:

  • 此设置使 VS Designer 在我使用它们的地方使用 Open Sans(在本例中)显示字体,因此我可以设计和查看有问题的字体。

  • 此设置还允许首先从系统加载正在使用的字体的机器,如果未找到,则从资源加载。也许是一个次要的注重性能的项目,但仍然有益。

我希望这对使用 Open Sans(或其他字体)的其他人有益,除非直接作为系统字体引用,否则出于某种原因不会出现在 VS Designer 中。

关于c# - Visual Studio 设计器不显示嵌入式字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com