gpt4 book ai didi

c# - 调试加载的 FontFamily?

转载 作者:行者123 更新时间:2023-11-30 17:14:56 26 4
gpt4 key购买 nike

在为我的应用程序使用字体时,当找不到我在样式中设置的 FontFamily 时,我没有收到任何警告/错误/异常。

通常在 WPF 中,您会在输出窗口中收到一条警告消息,告诉您要绑定(bind)的内容不存在。或者当您的 ResourceDictionary 无法加载时出现异常,因为找不到它的文件。但是,当尝试加载没有正确名称或错误程序集的 FontFamily 时,绝对没有任何警告,有没有办法查看实际加载/显示的字体以及是否成功?

*编辑:我使用下面的答案并将 TestFont 方法更改为以下内容:

[Conditional("DEBUG")]
private void CheckFontFamily()
{
string fontName = FontFamily.Source.Substring(FontFamily.Source.IndexOf('#') + 1);

if (!FontFamily.FamilyNames.Any(x => x.Value == fontName))
{
bool fontFamilyFound = false;
string baseFontName = fontName;

while (!fontFamilyFound && fontName.Contains(' '))
{
fontName = fontName.Substring(0, fontName.LastIndexOf(' '));
if (FontFamily.FamilyNames.Any(x => x.Value == fontName))
{
fontFamilyFound = true;
string fontFace = baseFontName.Substring(fontName.Length + 1);
if (!FontFamily.FamilyTypefaces.Any(x => x.AdjustedFaceNames.Any(y => y.Value == fontFace)))
{
Console.WriteLine("WARNING: Font '{0}' with TypeFace '{1}' not found at '{2}'.", fontName, fontFace, FontFamily.Source);
}
break;
}
}

if (!fontFamilyFound)
{
Console.WriteLine("WARNING: Font '{0}' not found at '{1}'.", fontName, FontFamily.Source);
}
}

这将显示加载这样的字体是否有效:(从而检查路径是否有效)

<TextBlock Text="Lorem Ipsum" FontFamily="{Fonts:FontFamily '/Project;component/Fonts/#ITC Quay Book'}"/>

最佳答案

可以使用 markup extension ,不幸的是,这将要求您在设置 FontFamily 的每个地方都使用它。

例如

<TextBlock Text="Lorem Ipsum" FontFamily="{me:FontFamily Spam}" />
public sealed class FontFamilyExtension:MarkupExtension
{
public FontFamily FontFamily { get; set; }

public FontFamilyExtension(FontFamily fontFamily)
{
FontFamily = fontFamily;
}

[Conditional("DEBUG")]
private void TestFont()
{
if (!Fonts.SystemFontFamilies.Contains(FontFamily))
Console.WriteLine("Font '{0}' not found.", FontFamily.Source);
}

public override object ProvideValue(IServiceProvider serviceProvider)
{
TestFont();
return FontFamily;
}
}

当在调试中运行时,警告将显示在输出窗口中(应满足 conditional )。

Output window

您可以从服务提供商那里获得更多信息,例如设置 FontFamily 的对象类型,并输出该对象以帮助调试。

关于c# - 调试加载的 FontFamily?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312684/

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