gpt4 book ai didi

wpf - 使用 Century 代替 Century Gothic 停止 WPF

转载 作者:行者123 更新时间:2023-12-04 15:26:24 30 4
gpt4 key购买 nike

如果安装了 Century Gothic,我们的设计更喜欢使用它,但如果它不可用,则回退到 Arial 或 Lucidia。这在大多数情况下工作正常,除非机器没有安装 Century Gothic,但安装了 Century(这似乎是很多没有 Office 的 XP 机器)。 “有帮助”它用 Century Gothic 替换了 Century 可怕且带有衬线字体的 Century,并且完全忽略了我们的备用字体。

通过使用 Century 而不是 Century Gothic 的机器可以轻松重现,然后创建一个 TextBlock,例如:

<TextBlock FontFamily="Century Gothic, Wingdings">Should be gibberish</TextBlock>

它应该显示为胡言乱语的 Wingdings,但它显示为丑陋但可读的世纪。

我试过用复合字体将 Century Gothic 包装起来,但这有同样的问题:
<FontFamily
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib">
<FontFamily.FamilyNames>
<System:String x:Key="en-US">CenturyGothic</System:String>
</FontFamily.FamilyNames>
<FontFamily.FamilyTypefaces>
<FamilyTypeface Weight="Normal" Stretch="Normal" Style="Normal" />
<FamilyTypeface Weight="Bold" Stretch="Normal" Style="Normal" />
</FontFamily.FamilyTypefaces>
<FontFamily.FamilyMaps>
<FontFamilyMap Target="Century Gothic" Scale="1" />
</FontFamily.FamilyMaps>
</FontFamily>

嵌入字体不是一个选项(许可) - 有没有办法强制它忽略 Century,或者我是否愿意更改它以使用不同的字体?

编辑:我刚刚尝试使用 FontFace="'Century Gothic',Wingdings"但它永远不会显示 Century Gothic,即使它已安装。

最佳答案

您可以使用 WPF 样式和合并的资源词典来做到这一点。

创建两个资源词典,一个用于默认字体,另一个用于备用字体:

默认字体.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Century Gothic"/>
</Style>
</ResourceDictionary>

回退字体.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Arial"/>
</Style>
</ResourceDictionary>

将这两个文件添加到您的项目中并设置它们的 构建操作 资源 .

将以下代码添加到您的应用启动:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);

string fontsResourcePath = "/DefaultFonts.xaml";
if (!Fonts.SystemFontFamilies.Any(f => f.FamilyNames.Any(kv => kv.Value == "Century Gothic")))
{
fontsResourcePath = "/FallbackFonts.xaml";
}
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(fontsResourcePath, UriKind.Relative) });
}
}

这样做会自动在整个应用程序的所有控件上设置正确的字体(除非您在窗口、页面或控件上本地覆盖字体)。

例子:
<Grid>
<TextBlock>This will show as Century Gothic or fall back to Arial</TextBlock>
</Grid>

快乐编码!

关于wpf - 使用 Century 代替 Century Gothic 停止 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856624/

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