背景:
我正在将一个控件从WinForms转换到WPF。在WinForms中,我覆盖了一个PictureBox并使用OnPaint
事件来绘制我需要的内容到该控件。该控件会处理所有的双缓冲和剪切。
我将该控件转换为WPF,并且现在从Canvas继承。我正在覆盖OnRender
事件,并将所有内容绘制到DrawingContext上,但看起来DrawingContext允许我将图形绘制到控件之外,进入视图的其他部分:
在上面的图片中,实心深粉色框是控件,浅粉色框和绿线都在(0, 0)处绘制,但蓝色框绘制在(0, -100)处。
在WinForms中,PictureBox会剪切掉不在控件区域内的任何内容。
此外,我发现如果方框下降到控件以下,则蓝色方框确实被剪切了。我认为这是因为它确实被剪切到了封闭Grid的下面,但我不确定。
问题:
- DrawingContext到底在做什么,为什么我可以在控件之外进行绘制?
- 如何在WPF中实现相同的功能并进行正确的剪切?我需要覆盖不同的函数、以不同的方式绘制,还是有一些方法可以将我的控件的绘制限制在特定区域内的
OnRender
方法中? - 是否有更好的方法来实现我正在尝试做的事情(对控件进行任意绘制,并进行正确的剪切和双缓冲)?
我尝试向Canvas子元素添加形状,但这非常慢。