我想使用从类库中加载的自定义字体,因此我将字体文件放在类库的Resource文件夹中。
我有这种方法来获取字体:
private static FontFamily GetFontFromFile(MyFontWeightEnum style)
{
var fontList = new PrivateFontCollection();
fontList.AddFontFile(@"Resources\Roboto-Black.ttf");
fontList.AddFontFile(@"Resources\Roboto-Bold.ttf");
fontList.AddFontFile(@"Resources\Roboto-Italic.ttf");
fontList.AddFontFile(@"Resources\Roboto-Light.ttf");
fontList.AddFontFile(@"Resources\Roboto-Medium.ttf");
fontList.AddFontFile(@"Resources\Roboto-Regular.ttf");
fontList.AddFontFile(@"Resources\Roboto-Thin.ttf");
switch (style)
{
case MyFontWeightEnum.Black:
return fontList.Families[0];
case MyFontWeightEnum.Bold:
return fontList.Families[1];
case MyFontWeightEnum.Light:
return fontList.Families[2];
case MyFontWeightEnum.Medium:
return fontList.Families[3];
case MyFontWeightEnum.Regular:
return fontList.Families[4];
case MyFontWeightEnum.Italic:
return fontList.Families[5];
case MyFontWeightEnum.Thin:
default:
return fontList.Families[6];
}
}
并且我在公共方法中使用它来返回这样的Font:
public static Font GetRobotoFont(MyFontWeightEnum style, MyFontSizeEnum fontSize)
{
return new Font(GetFontFromFile(style), fontSize.ToFloat());
}
所以这两个方法都存在于类库中,因此我将类库引用到Winforms项目中,并在标签上使用该方法:
label1.Font = MyCustomFonts.GetRobotoFont(MyFontWeightEnum.Thin, MyFontSizeEnum.Size18);
当我运行应用程序时,我得到:System.IO.FileNotFoundException:'找不到文件'。
所以我将字体文件放在桌面文件夹中,并给出了路径,它可以正常工作而没有任何问题。
我在stackoverflow中寻找了类似的问题,我发现了我尝试过的内存方法,但是它无法正常工作,无法正确加载字体,
所以这里的结论是,在创建程序集时,资源文件夹中的所有文件都将转换为byte [],这就是为什么我得到的文件不存在异常的原因。
那么有没有人可以解释这个问题并帮助解决它。