我正在开发一个自定义标记扩展,其作用很简单:
在扩展构造函数参数(类型)上使用System.Activator并实例化它。
public class MyExtension : MarkupExtension
{
private readonly Type _myType;
public MyExtension (Type param)
{
_myType= param;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Activator.CreateInstance(_myType);
}
}
在运行时,此扩展按预期运行。
但在设计时,激活类型时会抛出异常。
我已经找到了源头,并抓住了鲸鱼:
try
{
return Activator.CreateInstance(_myType);
}
catch (TypeInitializationException ex)
{
}
所以我循环了这个:
(ex.InnerException as ReflectionTypeLoadException).LoaderExceptions[i].Message);
并检索以下消息
找不到Windows运行时类型'Windows.ApplicationModel.Core.IFrameworkView'。
无法找到Windows运行时类型'Windows.ApplicationModel.Core.IFrameworkViewSource'。
由于我的代码在运行时运行良好, 我唯一的猜测是VS(2013 4.5版更新2)
或者Xaml Designer只是在查看错误的程序集。
关于如何解决这个问题或任何其他问题的任何想法,或许?
非常感谢你抽出时间。
答案 0 :(得分:0)
我已经进一步研究了这个问题并得出了以下结论:
此问题的唯一解决方案是区分设计时的返回值和运行时的返回值。
这很容易完成,并且是在我正在开发的WPF框架中实现的。
相关程序集是PerrypheralFramework.WPF, 相关的类是:PerrypheralFramework.WPF.MarkupExtensions.Base.DependencyObjectDependantExtensionBase