c#WPF应用程序将对象放在HwndSource顶部

时间:2019-06-20 10:43:51

标签: c# wpf

在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控件放在该控件上?

1 个答案:

答案 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/