我按需加载程序集,其中包含ressources(字体)。 程序集由AssemblyPart类加载, 因此被添加到当前的应用程序域。
txt1.FontFamily = New FontFamily("/SilverlightFontLibrary;component/GRAFFITO_01.ttf#Graffito")
Dim kaa = Application.GetResourceStream("/SilverlightFontLibrary;component/GRAFFITO_01.ttf".ToUri(UriKind.Relative))
字体未应用于文本,但我确实获得了资源流。
如果程序集在里面 xap包中一切正常, 但是将其设置为复制本地 false 它将不会显示正确的字体。 :(
我无法使用FontSource
直接将字体设置为流(我肯定拥有),
因为像Run
,Paragraph
或RichTextBox
这样的课程根本没有它们。 ;(
有人知道MEF(Microsoft可扩展性框架)能否帮助我解决这个问题?
有没有任何已知的方法可以实现这一目标?
我非常需要参考这些资源,但不能将它们全部放到一个xap包中。 :(
亲切的问候
答案 0 :(得分:0)
考虑将主项目的依赖性解除对知道字体的完整URL的依赖性。而是在你的其他项目引用的第三个项目中创建一个IFontProvider
接口(对于C#我不做VB.NET道歉): -
public interface IFontProvider
{
FontFamily this[string name] {get; }
}
在你的字体库中创建一个实现: -
public class FontProvider : IFontProvider
{
public FontFamily this[string name]
{
get
{
switch (name)
{
case "Graffito":
return New FontFamily("/SilverlightFontLibrary;component/GRAFFITO_01.ttf#Graffito");
default:
return null;
}
}
}
将库程序集加载到域中,您应该能够访问字体: -
Type providerType = Type.GetType("SilverlightFontLibrary.FontProvider, SilverlightFontLibrary");
IFontProvider fonts = Activator.CreateInstance(providerType) As IFontProvider;
txt1.FontFamily = fonts["Graffito"];
使用“组件”网址从同一组件中的代码中使用它应该能够找到资源。
有一些关于MEF和动态程序集加载的博客,因此您可以使用它动态地将类型IFontProvider
的字段与库实现连接起来。