我在Element Host中托管一个WPF应用程序,它在应用程序中有一个WPF-用户控件。在WPF应用程序内部的某个时刻(因为我知道Application
类将是null
,所以我这样实例化它:
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
,即使我在应用程序开始时实例化了它。如果我检查Application
中的null
,然后实例化它,它表明当前AppDomain中有一个活动的应用程序。
您的意思是要在ElementHost中托管整个应用程序吗?我认为ElementHost主要是为了托管WPF控件而不是整个应用程序。
您可能已经遇到了这个问题,但在尝试使用各种技术使WPF控件在ElementHost中工作后,我决定将Application对象排除在等式之外,并在用户控件本身中引用我的资源(因此ElementHost包含UserControl,并引用其资源;根本不使用Application对象)。
如果您决定需要Application对象,本文将详细介绍如何管理Application。
要引用您控制范围内的资源,您可以在UserControl xaml:中使用以下内容
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyAssembly.NameSpace;component/Resource/ResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
好的,我发现了发生了什么:
目前,我正在Element Host中托管一个WPF控件,我已经假设托管在该控件中的任何控件都将解决其从WPF到Win表单的应用程序映射。唉,事实并非如此。如果您有一个复合控件,请确保每个WPF控件都有一个单独的Element Host控件。