[英]Overlay an InkCanvas on a custom WinForms control
我有一个自定义的WinForms控件,可以显示一些图形。 我需要在此控件上覆盖一个InkCanvas
。 InkCanvas
应该是“透视”(透明背景,可见墨水)。 该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
?
基于评论和缺乏答案,我们可以放心地假设除非要进行@Hans Passant提到的“窗口分层”黑客,否则我想做的事情是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.