当WPF元素具有静态资源时,如何通过它们的类型实例化它们?
我需要通过设计师的反射来实例化WPF类型(比如,用户控件或页面)。我遇到的问题是,当我尝试使用Activator.CreateInstance实例化这些异常时,我得到了一个TargetInvocationException,它最终封装了由StaticResource标记扩展引发的异常 澄清:这些类型位于运行时加载的不同程序集中强> 显然,Activator.CreateInstance无法实例化使用{StaticResource XXX}标记扩展的类型,即使在类型的定义中定义了静态资源 因此,如果您只有以下类型的定义(type+xaml文件):当WPF元素具有静态资源时,如何通过它们的类型实例化它们?,wpf,reflection,instantiation,staticresource,Wpf,Reflection,Instantiation,Staticresource,我需要通过设计师的反射来实例化WPF类型(比如,用户控件或页面)。我遇到的问题是,当我尝试使用Activator.CreateInstance实例化这些异常时,我得到了一个TargetInvocationException,它最终封装了由StaticResource标记扩展引发的异常 澄清:这些类型位于运行时加载的不同程序集中 显然,Activator.CreateInstance无法实例化使用{StaticResource XXX}标记扩展的类型,即使在类型的定义中定义了静态资源 因此,如果您
在运行时,您将如何加快速度
顺便说一句,要求您改用DynamicSource是不可接受的。VisualStudio需要这个吗?然而,VS能够创建WPF框架元素的副本并将其粘贴到设计器中
下面是一个示例应用程序(beta 2,抱歉),它演示了这个问题 应用程序尝试加载其资源字典中包含图形的页面。我尝试使用Application.LoadComponent和Activator.CreateInstance动态加载它,但都失败了
好的,上面的例子没有问题。问题是我在引用元素中定义的资源的元素属性中使用了StaticResource 让我吃惊的是,它在VisualStudio中工作。所以在设计师的设计中,一切看起来都很好,但IRL都是梨形的。IMHO,这是一个bug,我已经报告过了:
不确定这是否是VS的失败。。。。失败,或者如果StaticResource扩展在VS中工作,而不是在IRL中工作。问题似乎出在您尝试加载的页面上。您的页面如下所示(省略了大量XMLN等):
这将尝试在定义awesomeface资源之前使用它。StaticResource不允许这种正向引用:因此StaticResourceExtension.ProvideValue失败,您会遇到错误
要解决此问题,请在页面内部立即放置边框,然后将背景设置器从页面移动到边框。然后将所有内容放在边框内。问题似乎出在您试图加载的页面上。您的页面如下所示(省略了大量XMLN等):
这将尝试在定义awesomeface资源之前使用它。StaticResource不允许这种正向引用:因此StaticResourceExtension.ProvideValue失败,您会遇到错误
要解决此问题,请在页面内部立即放置边框,然后将背景设置器从页面移动到边框。然后将所有内容放在边框内。我无法重现这个问题——页面对象使用Activator.CreateInstance可以很好地实例化,我可以在一个框架中使用实例化的页面,ContentControl和template TextBlock都正确显示。您能否提供有关内部异常的更多详细信息,使您认为这与StaticResource有关?你能确认你看到这个简化的例子失败了吗?顺便说一句,当我从内存中将xaml输入SO的编辑器时,我没有弄坏它,这真是太神奇了。我无法重现这个问题——页面对象使用Activator.CreateInstance可以很好地实例化,我可以在一个框架中使用实例化的页面,ContentControl和TemplateTextBlock都正确显示。您能否提供有关内部异常的更多详细信息,使您认为这与StaticResource有关?你能确认你看到了这个简化的例子的失败吗?顺便说一句,当我在SO的编辑器中从内存中输入xaml时,竟然没有弄坏它,这真是太神奇了。。。。。。。。它在VS中起作用,但是在VS之外不起作用。让我再检查一下这个…好的,它起作用了。让我搞砸的是,它在VisualStudio中工作,但在应用程序运行时不工作。这是一个错误。。。。。。。。它在VS中起作用,但是在VS之外不起作用。让我再检查一下这个…好的,它起作用了。让我搞砸的是,它在VisualStudio中工作,但在应用程序运行时不工作。这是一只虫子。
<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>
<AwesomePage Title="AwesomePage" Background="{StaticResource awesomeface}">
<AwesomePage.Resources>
<DrawingBrush x:Key="awesomeface" Stretch="Uniform">
<!-- details snipped -->
</DrawingBrush>
</AwesomePage.Resources>
</AwesomePage>