如何将WPF窗口添加到WinForms应用程序

jps*_*res 7 wpf winforms-interop winforms

我正在创建一个HUD窗口,用于检查WinForms应用程序中的商业实体.

我希望有一个完全不同的窗口样式(最小化内容区域,只显示TitleBar,没有系统按钮等)所以我为此创建了一个WPF应用程序.

问题是我希望这个窗口在我的WinForms应用程序中"生存".我不能只是将WPF添加为OwnedForm或将主窗体设置为WPF窗口的所有者.

那么,怎么能实现呢?

编辑:感谢pst我找到了答案.这是片段:

System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(_inspector);
WindowInteropHelper inspectorHelper = new WindowInteropHelper(_inspector);
inspectorHelper.Owner = this.Handle;
_inspector.Show();
Run Code Online (Sandbox Code Playgroud)

小智 6

WPF窗口具有Win32窗口句柄/上下文.

请参见WindowInteropHelper.你可以使用Win32(或者可能有WinForms支持吗?)来设置WPF窗口的所有者窗口.请注意,在"源初始化"(?)事件之前,句柄不存在.

但是,仅使用WinForms,您可以根据需要自定义标题栏(您可以通过Win32覆盖绘图本身,我认为您将失去所有控制框而不会走这么远).

如果您使用正确的关键字,则有很多关于此主题的Google搜索结果.

  • WindowInteropHelper工作得很好!似乎我没有使用正确的关键字,我一整天都在搜索它.再次感谢! (2认同)