在自定义 WinForms 控件上覆盖 InkCanvas

Overlay an InkCanvas on a custom WinForms control

我有一个显示一些图形的自定义 WinForms 控件。我需要在此控件之上覆盖一个 InkCanvasInkCanvas 应该是 "see through"(透明背景,可见墨水)。这 InkCanvas 允许用户在显示的图形上绘制草图。

我知道 WPF/WinForms 互操作中的空域问题(事实是托管在 WPF window 中的 WinForms 元素将始终位于所有其他组件之上)。所以显然我无法在 WPF 中达到预期的效果。我决定以另一种方式解决这个问题(以 WinForms 形式托管 InkCanvas 并将 InkCanvas 覆盖在我的自定义控件上)。

问题是WinFormsElementHost无法制作"see through"(不能设置透明度)。我尝试使用以下 override

派生 ElementHost
protected override CreateParams CreateParams
{
    get
    {
        const int WS_EX_TRANSPARENT = 0x20;
        CreateParams cp = base.CreateParams;
        cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
        return cp;
    }
}

但这会使整个事情完全透明(草图不再可见)。

如何让 "see through" InkCanvas 的可见墨迹覆盖在 WinForms 控件上?

根据评论和缺乏答案,我们可以放心地假设我想做的事情是不可能的,除非我们进行@Hans Passant 提到的 "window layering" hack。