1

这就是我想要完成的任务 - 在 WPF 中创建一个 MDI 应用程序,它可以托管子 Web 应用程序。我正在使用 WPF webbrowser 控件来呈现 web 应用程序。WPF 本身似乎不支持 MDI 应用程序,所以经过一番搜索,我找到了这个项目,它使用 UI 控件来模拟窗口并在 WPF 画布中管理它们。在我开始将 webbrowser 控件对象添加为 MDI 子对象之前,这种方法似乎工作得相当好。

当我将 webbrowser 控件添加为 MDI 子控件时,它始终出现在其他 WPF 元素之上,包括其他 MDI 子控件(如下所示)。据我了解,webbrowser 控件始终出现在除窗口(和弹出窗口)之外的任何其他 WPF 对象之上。假设这是真的,我认为我需要使用实际的 WPF 窗口来避免重叠问题。

在此处输入图像描述

我现在能想到的唯一解决方案是将 WPF 窗口包装在 HwndHost 对象中,然后将其添加为 MDI 子对象。但是,子窗口似乎不能有标题栏。这意味着我需要一个具有虚拟标题栏区域(就像实际窗口标题栏一样)和实际内容区域(将显示 webbrowser 控件)的窗口,如下所示(红色边框是 HwndHost 对象)。

在此处输入图像描述

这种方法似乎解决了重叠问题。我需要尝试的下一件事是让用户单击虚拟标题栏并将 MDI 窗口拖动到画布元素内。

问题 -

  1. 我对 WPF 网络浏览器控制重叠行为的理解正确吗?如果没有,我错过了什么?
  2. 第二种方法是朝着实现我想要的正确方向迈出的一步吗?如果是,我如何实现 HwndHost 的拖动行为?
  3. 我可以尝试其他替代解决方案吗?

笔记:

  1. 尽管许多人认为 MDI 不是一个优雅的解决方案,但我别无选择。(我们尝试了诸如选项卡式窗口/可停靠窗口之类的替代解决方案,但没有受到好评)

  2. 我对互操作编程很陌生,并且不太了解这些概念。如果我对事情有误解,请纠正我。

谢谢!

4

0 回答 0