在Element Host中托管复合WPF应用程序

时间:2015-02-23 09:33:45

标签: c# wpf windowsformsintegration

我在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中存在活动的应用程序。

2 个答案:

答案 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控件都有单独的元素主机控件。