【问题标题】:Application.Current in ElementHost is nullElementHost 中的 Application.Current 为空
【发布时间】:2012-08-30 13:41:01
【问题描述】:

我在我的个人库中使用 WPF UserControl。 Libs 包含在我的 WPF 和 WindowsForms 程序中。现在我的 UserControl 必须显示一个新的 (WPF) 窗口。在新窗口中,我想设置所有者。我是这样做的:

dialog.Owner = Application.Current.MainWindow;

如果我在 WPF 程序中使用 UserControl,这可以正常工作。

当我在 WindowsForms 程序中使用 UserControl(我在 ElementHost elementHost.Child = ... 中设置 UserControl)时,Application.Current 为 null。

这不好,我的程序抛出异常。

为什么Application.Current 为空?

【问题讨论】:

  • 当我调用新的 System.Windows.Application();第二次从我的 Windows 窗体中收到错误消息“无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例。”实际上,当我关闭窗体 System.Windows.Application.Current" 对象时,从我的 Windows 应用程序变为 null,当我从主窗口再次打开窗体时,它尝试创建 Application() 的新对象,并且从第二次开始失败.任何解决方案或解决方法请...

标签: windows winforms user-controls elementhost


【解决方案1】:

Application.Current 特定于 WPF 应用程序
因此,当您在 WinForms 应用程序中使用 WPF 控件时,您需要初始化 WPF 应用程序的实例。在您的 WinForms 应用程序中执行此操作。

if ( null == System.Windows.Application.Current )
{
   new System.Windows.Application();
} 

【讨论】:

  • 哦。耶!谢谢你。这正是我所追求的:D
  • 非常有用的信息 - 我正在为 ArcGIS 编写加载项,在创建 WPF 加载项时,这是在 WPF 代码中使用 Application.Current 所必需的。
  • 您不应该创建第二个应用程序上下文,因为您将同时运行两个应用程序,这意味着您还将有两个 UI 调度程序。然后,您可以放松对应用程序的控制。
  • 当我调用新的 System.Windows.Application();第二次从我的 Windows 窗体中收到错误消息“无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例。”
  • 您是否验证了 (null == System.Windows.Application.Current) ?
猜你喜欢
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多