WindowsFormsHost始终是WPF元素的最顶层

WindowsFormsHost始终是WPF元素的最顶层,wpf,z-index,windowsformshost,topmost,Wpf,Z Index,Windowsformshost,Topmost,如何设置z索引windowsformhost,使其不总是位于WPF元素的顶部?根据MSDN 托管的Windows窗体控件在单独的HWND中绘制,因此 始终在WPF元素的顶部绘制 这是一个设计限制 MSDN的另一篇好文章解释了在Windows中使用不同图形技术时可能出现的问题 然而,通过谷歌搜索,我发现似乎有一些黑客攻击(称为空域限制) 一个黑客(从未亲自尝试过,所以不确定它是否有效)在 几年后更新(2016-09): 正如上面的评论所指出的,我下面的回答不再有效,并且在.NET 4.5的最终版本

如何设置z索引windowsformhost,使其不总是位于WPF元素的顶部?

根据MSDN

托管的Windows窗体控件在单独的HWND中绘制,因此 始终在WPF元素的顶部绘制

这是一个设计限制

MSDN的另一篇好文章解释了在Windows中使用不同图形技术时可能出现的问题

然而,通过谷歌搜索,我发现似乎有一些黑客攻击(称为空域限制)

一个黑客(从未亲自尝试过,所以不确定它是否有效)在
几年后更新(2016-09):

正如上面的评论所指出的,我下面的回答不再有效,并且在.NET 4.5的最终版本或后续版本中不可用。不幸的是,我所包含的链接仍然包含针对.NET“当前版本”的HwndHosts的z排序信息,这可能会让一些人相信此功能确实存在。没有。周围没有工作

原始答案:

一年后,随着.NET4.5的出现,情况发生了一些变化。对于那些和我一样偶然发现这一点的人,这里有一个来自MSDN的更新摘录:

默认情况下,visible WindowsFormsHost元素始终绘制在其他WPF元素的顶部,并且它们不受z顺序的影响要启用z排序,请将WindowsFormsHost的IsRedirected属性设置为true,将CompositionMode属性设置为Full或OutputOnly。


使用.NET 4.5时,只需将以下属性添加到WindowsFormsHost元素
IsRedirected=“True”
CompositionMode=“Full”
CompositionMode=“OutputOnly”
我刚刚遇到了同样的问题

有一个潜在的解决方法-取决于Windows主机窗口控件的性质和要显示的WPF元素:


我将
WindowsFormsHost
控件的
可见性
绑定到视图模型上的一个属性,以便在显示要显示在其上的WPF时隐藏主机(及其上的控件)。

在我的情况下,我的WindowsFormsHost位于两行网格中。最下面一行有一个StackPanel,它根据所包含的内容改变高度。我处理StackPanel的LayoutUpdated事件,通过从网格的实际高度减去它的实际高度来调整WindowsFormsHost的大小。确保使用实际高度而不是高度

     void ResizeWinhost()
    {
        mainGrid.UpdateLayout();
        detailPanel.UpdateLayout();
        winHost.Height = mainGrid.ActualHeight - detailPanel.ActualHeight - 5;
    }

答案很简单:你不能。请参阅。是否已经有了解决此问题的新解决方案?今天查看-这些属性仅在.net 4.5的测试版中提供。不幸的是,他们没有达到正常的发布。1.3.10 Windows演示基金会(WPF)1.3.1.1 1 HWNDHOST功能已从.NET框架4.5 beta中的WPF中移除。.NETFramework 4.5开发者预览包括WPF HWNDHOST重定向功能。但是,此功能有几个已知问题,已从.NET Framework 4.5测试版中删除。它将不会包含在任何未来版本中。要解决此问题:没有可用的解决方法。如何在.NET4中使用它?有可能吗?Web Archive有: