2015-02-23 128 views
0

我在元素主机中托管WPF应用程序,并且它在应用程序内部具有WPF用户控件。在WPF应用程序中的某一时刻(因为我知道Application类将是null,我实例化它,像这样:在元素主机中托管复合WPF应用程序

if (Application.Current == null) 
    { 
     // create the Application object 
     new Application(); 

     // merge in your application resources 
     Application.Current.Resources.MergedDictionaries.Add(
      Application.LoadComponent(
       new Uri("edit;component/Styles/Styles.xaml", 
       UriKind.RelativeOrAbsolute)) as ResourceDictionary); 
    } 

的问题是,每当我关闭WPF应用程序内的内部用户控制,导致资源无法访问,它说Application对象是null,即使我在应用程序的开始实例化了它,如果我检查Applicationnull,然后实例化它,它说有一个活动的应用程序在当前AppDomain中

+4

我解决了我的问题。 – Hristo 2015-02-27 14:09:36

+1

您应该添加解决方案作为答案并接受它 – 2015-02-27 15:57:46

回答

0

好吧,我发现了是怎么回事:

目前我正在举办一个WPF控件内的元素主机,我已经做出了这样的假设,任何托管在控件内部的控件都会将其从WPF到Win表单的应用程序映射解出来。唉,事实并非如此。如果您有复合控件,请确保您为每个WPF控件都有单独的元素主机控件。

1

你的意思是你想在ElementHost中托管整个应用程序?我认为ElementHost主要是为了托管WPF控件而不是整个应用程序。

你可能已经围绕这个块,但试图获得WPF控件在ElementHost中的工作,我使用了各种不同的技术,只是将Application对象排除在等式之外,并且只是在用户控件本身内引用我的资源(所以ElementHost包含UserControl,并引用其资源;完全不使用Application对象)。

This article详细介绍了如果您决定需要应用程序对象时如何管理应用程序。

要在控制范围内的参考资源,你可以使用你的用户控件XAML以下几点:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/MyAssembly.NameSpace;component/Resource/ResourceDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
+0

第一个用户控件可以创建第二个控件的实例 – Hristo 2015-02-23 12:00:13

+0

您是否在代码中的任何位置调用Application.Shutdown()?我看到链接的文章提到你的场景(关机后Application.Current为空)。 – Phil 2015-02-23 12:27:23

+0

我已经解决了这个问题,谢谢你的建议:) – Hristo 2015-02-23 12:36:21

相关问题