当WPF元素具有静态资源时,如何通过它们的类型实例化它们?

当WPF元素具有静态资源时,如何通过它们的类型实例化它们?,wpf,reflection,instantiation,staticresource,Wpf,Reflection,Instantiation,Staticresource,我需要通过设计师的反射来实例化WPF类型(比如,用户控件或页面)。我遇到的问题是,当我尝试使用Activator.CreateInstance实例化这些异常时,我得到了一个TargetInvocationException,它最终封装了由StaticResource标记扩展引发的异常 澄清:这些类型位于运行时加载的不同程序集中 显然,Activator.CreateInstance无法实例化使用{StaticResource XXX}标记扩展的类型,即使在类型的定义中定义了静态资源 因此,如果您

我需要通过设计师的反射来实例化WPF类型(比如,用户控件或页面)。我遇到的问题是,当我尝试使用Activator.CreateInstance实例化这些异常时,我得到了一个TargetInvocationException,它最终封装了由StaticResource标记扩展引发的异常

澄清:这些类型位于运行时加载的不同程序集中

显然,Activator.CreateInstance无法实例化使用{StaticResource XXX}标记扩展的类型,即使在类型的定义中定义了静态资源

因此,如果您只有以下类型的定义(type+xaml文件):


在运行时,您将如何加快速度

顺便说一句,要求您改用DynamicSource是不可接受的。VisualStudio需要这个吗?然而,VS能够创建WPF框架元素的副本并将其粘贴到设计器中


下面是一个示例应用程序(beta 2,抱歉),它演示了这个问题

应用程序尝试加载其资源字典中包含图形的页面。我尝试使用Application.LoadComponentActivator.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>