【问题标题】:How ti disable fallback font in WPF?如何在 WPF 中禁用后备字体?
【发布时间】:2020-09-01 22:34:53
【问题描述】:

如何在 WPF 中禁用后备字体?

我想以不支持所有字符的字体显示文本,但 VS 不断用备用值替换缺失的字符。

例如,如果我想以没有 'e' 和 's' 代码点的字体显示“test”, 我只想显示“tt”not“tESt”,其中“E”和“S”在其他一些备用字体中。这就是现在正在发生的事情。

我试过了:

<TextBlock Text="{Binding SampleText}" FontFamily="{Binding FFamily, FallbackValue={x:Null}}"/>

但它不起作用。

有什么想法吗?

【问题讨论】:

  • From BindingBase.FallbackValue Property > 获取或设置绑定无法返回值时使用的值。 <TextBlock Text="{Binding SampleText}" FontFamily="{Binding FFamily, FallbackValue={x:Null}}"/> 表示如果FontFamily 属性绑定失败,则使用 FallbackValue 的值。
  • @Cfun:我已经阅读了有关字体的所有内容,并且知道后备是如何工作的。我只是不知道如何关闭它。
  • 为什么需要为包含不受支持的字符的TextBlock 提供值?顺便说一句,您可以使用IValueConverter 过滤掉不受支持的字符。禁用后备将导致t□□t
  • @aepot:想法是以所有可用字体显示“示例文本”。因此,显示该字体不支持的字符(字形)将是错误的。显示 t□□t 就可以了。用户可以看到哪些字符不受支持。我可以过滤IValueConverter 中不受支持的字符,但如果您有数百或数千种字体,恐怕会非常耗时。禁用回退是我能想到的最干净的方法。

标签: c# wpf fonts fallback


【解决方案1】:

Wpf 有一个默认的后备字体。

你可以用你自己的替换它。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.fontfamily?view=netcore-3.1

如果您使用零宽度 ttf,那么我认为这会给出您正在寻找的结果。

因为每个字形故意为零宽度。

我没有字体缺失字形来尝试这个,但它看起来可以工作。

https://github.com/patrickkunka/zero-width/blob/master/README.md

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2023-01-29
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2017-04-30
    • 2019-10-24
    相关资源
    最近更新 更多