在自定义WinForms控件

时间:2015-05-28 18:03:13

标签: c# wpf winforms inkcanvas

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

我知道WPF / WinForms互操作中的空域问题(在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

1 个答案:

答案 0 :(得分:0)

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