我需要通过对设计器的反射来实例化WPF类型(例如,用户控件或页面)。我遇到的问题是,当我尝试使用activator.createInstance实例化这些实例时,我会得到一个
目标调用异常
最后,它包装了一个由
静态源
标记扩展。
说明:类型位于运行时加载的不同程序集中!
显然地,
Activator.CreateInstance
无法实例化使用
静态资源XXX_
标记扩展,
即使静态资源是在类型的定义中定义的。
因此,如果您所拥有的只是以下类型的定义(type+xaml文件):
<Page x:Class="Hurr.Durr">
<Page.Resources>
<ControlTemplate x:Key="whatever">
<TextBlock Text="This is a stupid example."/>
</ControlTemplate>
</Page.Resources>
<ContentControl Template="{StaticResource whatever}" />
</Page>
在运行时,您将如何进行旋转?
顺便说一句
,要求您改用dynamicsource是不可接受的。Visual Studio是否需要此功能?然而,VS能够旋转一个WPF框架元素的副本,并将其粘贴到设计器中。
这里有一个示例应用程序(beta 2,抱歉)演示了这个问题。
http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/ResourcesGoKaboom.zip
该应用程序尝试在其资源字典中加载带有绘图的页面。我尝试使用动态加载
应用程序.loadcomponent
和
Activator.CreateInstance
他们都失败了。
好的,上面的例子没有问题。问题是,我使用的是元素属性中引用该元素中定义的资源的staticresource。
把我扔出去的是
这在Visual Studio中工作。
所以在设计师看来一切都很好,但IRL都是梨形的。imho,这是一个bug,我已经这样报告了它:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=519244
不确定这是不是一个失败的vs to…失败,或者如果staticresource扩展在vs而不是irl中工作。