首页 > 解决方案 > c# WPF 应用程序将对象放在 HwndSource 之上

问题描述

在 ac# WPF 应用程序中,我使用了一个用 Visual c++ 编写的第三方库(并且我用 c# 类包装了它的 DLL)。库的一种方法需要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 控件置于该控件之上?

标签: c#wpf

解决方案


如果您阅读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/ )


推荐阅读