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



我在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控件。

相关内容

  • 没有找到相关文章

最新更新