我在WPF应用程序中托管Win32程序的渲染图像。我注意到,任何与托管内容重叠的WPF元素都会破坏呈现。我了解这是由于此处(https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/technology-regions-overview)指定的区域重叠造成的。
有什么办法可以解决此问题?即在WPF宿主控件中呈现Win32内容,然后在Win32元素上呈现其他WPF元素?
现在,如果您担心的话,我不需要与Win32内容进行任何直接交互,WPF可以窃取焦点,单击等。
我的主要目标是在WPF控件中呈现Win32程序的内容,并能够在其上呈现其他WPF元素(按钮,图像,所拥有的内容)。
对于托管,我使用的是这里概述的方法:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/walkthrough-hosting-a-win32-control-in-wpf,即创建一个派生自HwndHost的host元素,并向Win32程序提供由此创建的窗口句柄。然后,Win32程序使用提供给它的窗口句柄将其内容呈现到控件中。只要没有元素违反控件的“区域”,此方法就可以正常工作。一旦任何元素与宿主控件重叠,它将根本不会呈现。