问题 WindowsFormsHost始终是WPF元素中最顶级的


如何设置z-index windowsformhost,它们并不总是位于WPF元素的顶部?


8048
2018-03-29 06:55


起源

简单回答:你做不到。看到 这里。 - Clemens
有没有新的解决方案如何解决这个问题? - Dominic Jonas


答案:


根据MSDN (WindowsFormsHost元素的布局注意事项)

托管的Windows窗体控件是在单独的HWND中绘制的,所以它是   总是在WPF元素之上绘制。

这是一个设计限制

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

然而谷歌搜索我发现似乎有一些hackings(称为空域限制)

一个黑客(从未亲自尝试过,所以不确定它是否有效)是 这个链接


12
2018-03-29 09:10



“黑客”链接403s - RJFalconer


更新,几年后(2016-09):

正如最高评论所述,我的以下答案不再有效,并且在最终版本的.NET 4.5或后续版本中不可用。不幸的是,我所包含的链接仍然具有针对.NET的“当前版本”的HwndHosts的z排序信息,这可能导致一些人相信这个功能确实存在。它没有。没有解决方法。

原始答案:

一年后,.NET 4.5的情况发生了一些变化。对于那些偶然发现这一点的人,就像我一样,这里有一个更新的摘录 演练:在WPF中安排Windows窗体控件 在MSDN上:

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

使用.NET 4.5时,您需要做的就是将以下属性添加到WindowsFormsHost元素中 IsRedirected="True" 和 CompositionMode="Full"  要么  CompositionMode="OutputOnly"


2
2018-04-08 21:29



今天检查了 - 这些属性仅在.net 4.5的测试版中。不幸的是,他们没有走向正常的释放。 - Maxim Zabolotskikh
1.3.10 Windows Presentation Foundation(WPF)1.3.10.1已在.NET Framework 4.5 Beta中从WPF中删除HwndHost功能.NET Framework 4.5 Developer Preview包含WPF HwndHost重定向功能。但是,此功能有几个已知问题,已从.NET Framework 4.5 Beta中删除。它将不会包含在任何将来的版本中。解决此问题的方法:没有可用的解决方法。 - lukaszk
如何在.NET 4中使用它?可能吗? - mrhands


我刚遇到同样的问题。

有一种潜在的解决方法 - 取决于Windows Host窗口控件的性质和您想要显示的WPF元素:

我绑了 WindowsFormsHost 控制的 Visibility 到我的视图模型上的属性,以便我能够显示我们想要在其上显示的WPF时隐藏主机(及其上的控件)。


0
2018-06-02 14:52





在我的情况下,我的WindowsFormsHost是一个双行Grid。底行有一个StackPanel,根据它包含的内容改变高度。我处理StackPanel的LayoutUpdated事件,通过从Grid的ActualHeight中减去它的ActualHeight来调整我的WindowsFormsHost。一定要使用ActualHeight而不是Height。

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

0
2017-08-18 21:09