我在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中存在活动的应用程序。
答案 0 :(得分:1)
你的意思是你想在ElementHost中托管整个应用程序吗?我认为ElementHost主要用于托管WPF控件而不是整个应用程序。
你可能已经在这个区域附近,但是我试图使用各种技术在ElementHost中运行WPF控件,我只是将Application对象排除在等式之外,只是在用户控件本身内引用我的资源(所以ElementHost包含UserControl,它引用了它的资源;根本没有使用Application对象。
This article详细说明如果您决定需要Application对象,如何管理Application。
要引用控件中的资源,可以在UserControl xaml中使用以下内容:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyAssembly.NameSpace;component/Resource/ResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
答案 1 :(得分:0)
好的,我发现了发生了什么:
目前我正在元素主机中托管WPF控件,我假设控件中托管的任何控件都将解决从WPF到Win表单的应用程序映射。唉,事实并非如此。如果您有复合控件,请确保为每个WPF控件都有单独的元素主机控件。