【问题标题】:Unicode "icons" render differently on different PCs? (Win7 vs. Win10)Unicode“图标”在不同的 PC 上呈现不同? (Win7 与 Win10)
【发布时间】:2020-06-10 16:25:19
【问题描述】:

我有一些MenuItems 使用 Unicode 符号作为图标。

在我的 Windows 10 开发 PC 上,它们都可以正常工作。但在 Windows 7 测试虚拟机上,只有其中一些可以。

这个一直有效:

                            <MenuItem Command="...">
                                <MenuItem.Header>
                                    <Run FontStyle="Italic">Header Text...</Run>
                                </MenuItem.Header>
                                <MenuItem.Icon>
                                    <Span FontSize="15">✎</Span>
                                </MenuItem.Icon>
                            </MenuItem>

但是这个在Win7上失败了:

                            <MenuItem
                                Header="Up"
                                Icon="⮝"
                                Command="..."
                                />

相反,它会显示一个矩形来代替预期的符号。

起初我怀疑缺少字体,但正如您在代码中看到的那样,根本没有指定字体系列。


将应用程序放到 Win7 测试虚拟机上是一个复杂的构建过程,因此通过反复试验来解决这个问题很费力。我没有可以重现它的开发环境。

这可能根本不是 Win10 与 Win7 的原因,但到目前为止,这就是我必须继续下去的全部内容。

这是一个 .NET 4.7.2 项目。


我也刚刚注意到Win7上的另一个失败案例:

                <Button
                    Command="..."
                    >
                    <TextBlock
                        FontSize="20"
                        FontFamily="Arial"
                        Margin="0,-3,0,0"
                        >
                        ????
                    </TextBlock>
                </Button>

这个在 Win10 上也可以,但在 Win7 上显示一个矩形代替 ????

【问题讨论】:

  • Win7 和 Win10 在字体、回退和链接方面有一些变化,请参阅12

标签: .net wpf xaml unicode .net-4.7.2


【解决方案1】:

我没有设法找到这个问题的令人满意的“根本原因”,而是最终找到了一个可接受的基于图像的解决方法。但是,我认为至少记录下我的尝试会很有用。

尝试调查/解决:

  • 用于有问题的符号的字体都是 Arial 和 Segoe 用户界面。这些都存在于工作的Win10和不工作的 Win7 环境。

  • 在 Win7 中使用 Process Monitor 观察应用程序,我可以看到字体 从磁盘加载。没有错误或缺少项目。

  • 注意字体版本(字体文件上的属性)较旧 在Win7上,我将Win10字体复制到Win7 PC上并安装。 但这对问题没有影响。


鉴于这些都不起作用(并且耗费了大量时间),我选择更改我的 XAML 设计以在出现问题的情况下使用图像。

为了尽可能重现相同的视觉效果,我使用 Inkscape 创建了基于相同字体和符号的 SVG 绘图。添加带有所需符号的文本元素后,我将其转换为路径(以进一步用作 SVG)。 (此时它也可以以与字体符号相同的最终大小导出为位图,尽管我不需要这样做,因为我已经直接使用了 SVG 图像。)

然后我用&lt;Image&gt; 元素代替了之前使用的文本对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2014-05-23
    • 2018-10-14
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多