0

我在 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如果我检查Applicationfornull然后实例化它,它表示当前 AppDomain 中有一个活动的应用程序。

4

2 回答 2

1

您的意思是要在 ElementHost 中托管整个应用程序吗?我认为 ElementHost 主要设计用于托管 WPF 控件而不是整个应用程序。

您可能已经在这个块周围,但是尝试使用各种技术让 WPF 控件在 ElementHost 内部工作,我决定只将 Application 对象排除在等式之外,并仅在用户控件本身中引用我的资源(因此 ElementHost 包含 UserControl 和this 引用了它的资源;根本不使用 Application 对象)。

如果您决定需要 Application 对象,本文将详细介绍如何管理 Application。

要在您的控件中引用资源,您可以在 UserControl xaml 中使用以下内容:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyAssembly.NameSpace;component/Resource/ResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>
</UserControl.Resources>
于 2015-02-23T11:58:25.660 回答
0

好的,我发现了发生了什么:

目前,我在 Element Host 中托管了一个 WPF 控件,并且我假设在该控件中托管的任何控件都将解决其从 WPF 到 Win 表单的应用程序映射。唉,事实并非如此。如果您有一个复合控件,请确保每个 WPF 控件都有一个单独的元素宿主控件。

于 2015-02-27T15:59:22.543 回答