C# 在自定义WinForms控件上覆盖InkCanvas

C# 在自定义WinForms控件上覆盖InkCanvas,c#,wpf,winforms,inkcanvas,C#,Wpf,Winforms,Inkcanvas,我有一个自定义WinForms控件,可以显示一些图形。我需要在该控件的顶部覆盖一个InkCanvas。InkCanvas应为“透明”(透明背景,可见墨水)。此InkCanvas允许用户在显示的图形上绘制草图 我知道WPF/WinForms interop中的空域问题(事实上,WPF窗口中托管的WinForms元素将始终位于所有其他组件之上)。所以很明显,我无法在WPF中达到预期的效果。我决定用另一种方法解决这个问题(在WinForms窗体中托管InkCanvas,并将InkCanvas覆盖在我的

我有一个自定义WinForms控件,可以显示一些图形。我需要在该控件的顶部覆盖一个
InkCanvas
InkCanvas
应为“透明”(透明背景,可见墨水)。此
InkCanvas
允许用户在显示的图形上绘制草图

我知道WPF/WinForms interop中的空域问题(事实上,WPF窗口中托管的WinForms元素将始终位于所有其他组件之上)。所以很明显,我无法在WPF中达到预期的效果。我决定用另一种方法解决这个问题(在WinForms窗体中托管
InkCanvas
,并将
InkCanvas
覆盖在我的自定义控件上)

问题是WinForms
ElementHost
无法设置为“透明”(无法设置透明度)。我尝试使用以下覆盖来派生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;
    }
}
但这将使整个东西完全透明(草图不再可见)


我怎么能在WinForms控件上覆盖可见墨水的“透明”InkCanvas呢?

基于评论和缺乏答案,我们可以安全地假设,除非我们进行@Hans Passant提到的“窗口分层”黑客攻击,否则我想做的事情是不可能的。

我认为你无法做到这一点,因为“空域”问题这里有一个关于这个主题的资源,不确定它是否完全适用于你的问题。。。ElementHost创建一个“空域”,它不能删除一个。唯一的办法是在你们现有的透明无边界窗口的上面再加一层透明的无边界窗口。谢谢你们。我懂了。。。如果是这样的话,那么我将考虑在图形浏览器用户控件中创建自己的画布…