在c#WPF应用程序中,我使用的是用可视c ++编写的第三方库(并且我将其DLL与c#类包装在一起)。库的一种方法希望使用IntPtr
对象。因此,我在应用程序中所做的工作如下:
HwndSource parentSource = (HwndSource)HwndSource.FromVisual(LiveViewer);
IntPtr parentHWnd = parentSource.Handle;
HwndSource source = new HwndSource(
0,
WS_VISIBLE | WS_CHILD,
0,
50, // x
50, // y
300, // width
300, // height
"Viewer",
parentHWnd
);
它按预期方式在我的WPF窗口上绘制了一个控制器,第三方库执行了所需的操作。
我要做的是将其他WPF控件(图像和按钮)放置在已创建的新HwndSource
控件之上。但是似乎控件总是放在最前面。
如何将WPF控件放在该控件上?
答案 0 :(得分:0)
如果您阅读https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/wpf-and-win32-interoperation,则会注意到这是预期的行为:
HwndHost将出现在同一顶级窗口中的其他WPF元素的顶部。
您可能可以做的是使用SetWindowPos win32 api将其状态更改为非最高状态(例如,使用此解决方案https://chriscavanagh.wordpress.com/2008/08/13/non-topmost-wpf-popup/)