【问题标题】:WPF window inside a WinformHost PanelWinformHost 面板内的 WPF 窗口
【发布时间】:2016-10-07 13:33:19
【问题描述】:

我正在使用 winform 主机在另一个 WPF 应用程序中显示 WPF exe 窗口。

我在主应用程序中创建了一个面板并将其设置为 winformhost 的子项。

  mHostingPanel = new System.Windows.Forms.Panel()
            {
                BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            };                


            mWinformHost = new WindowsFormsHost();
            mWinformHost.Child = mHostingPanel;

然后我启动另一个窗口进程并将托管面板设置为父面板。

  WindowsAPI.SetParent(mProcess.MainWindowHandle, mHostingPanel.Handle);

我的问题是,如果我启动应用程序,谁将渲染我的子 WPF 窗口,其父窗口是 winform 面板。它将是面板的 Direct-X 还是 GDI 上下文?

此外,如果我在子 WPF 应用程序上设置 Allowtransparency=True,则 UI 不会显示在托管面板中。

【问题讨论】:

  • 这是邪恶的,不一定是坏事!
  • 我不认为获得窗口的所有权会影响 wpf 渲染。不过我会看看这个:blogs.msdn.microsoft.com/oldnewthing/20130412-00/?p=4683
  • @tolanj:如果您阅读了该博客条目,您无法得出结论,这不一定是邪恶的。以一种非常、非常糟糕的方式。那个其他应用程序肯定不准备被重新设置。如果是,它就是一个 ActiveX 控件。
  • 真正的问题不是,谁负责渲染。 真正的问题是:输入仍然有效吗?这个问题的答案是:不。它在某个时候陷入僵局。

标签: c# .net wpf winforms-interop


【解决方案1】:

找到了原因。它被称为空域问题(当 win32 和 WPF 试图共享像素时),我认为它不能通过任何框架 API 来解决,因为微软否认了它。 https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2644120-bring-back-the-hwndhost-isredirected-and-compositi

Mitigating AirSpace issues

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2012-05-31
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多