在自定义 WinForms 控件上覆盖 InkCanvas
Overlay an InkCanvas on a custom WinForms control
我有一个显示一些图形的自定义 WinForms 控件。我需要在此控件之上覆盖一个 InkCanvas
。 InkCanvas
应该是 "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。
我有一个显示一些图形的自定义 WinForms 控件。我需要在此控件之上覆盖一个 InkCanvas
。 InkCanvas
应该是 "see through"(透明背景,可见墨水)。这 InkCanvas
允许用户在显示的图形上绘制草图。
我知道 WPF/WinForms 互操作中的空域问题(事实是托管在 WPF window 中的 WinForms 元素将始终位于所有其他组件之上)。所以显然我无法在 WPF 中达到预期的效果。我决定以另一种方式解决这个问题(以 WinForms 形式托管 InkCanvas
并将 InkCanvas
覆盖在我的自定义控件上)。
问题是WinFormsElementHost
无法制作"see through"(不能设置透明度)。我尝试使用以下 override
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。