背景:
我正在将控件从 WinForms 转换为 WPF。在 WinForms 中,我覆盖了 PictureBox 并使用 OnPaint
事件来绘制该控件所需的内容。该控件将处理所有双缓冲和裁剪。
我将控件转换为 WPF,现在从 Canvas 继承。我正在覆盖 OnRender
事件并将所有内容绘制到 DrawingContext,但看起来 DrawingContext 允许我通过控件绘制到 View 的其余部分:
在上图中,深粉色实心框是控件,浅粉色框和绿色线绘制在 (0, 0) 处,但蓝色框绘制在 (0, -100) 处。
在 WinForms 中,PictureBox 将剪辑不在控件区域中的任何内容。
此外,我发现如果框落在控件下方,蓝色框确实会被剪掉。我认为这是因为它确实夹在封闭的网格下方,但我不确定。
问题:
- DrawingContext 到底在做什么,为什么我可以通过我的 控制?
- 如何使用正确的方法实现相同的功能
在 WPF 中裁剪?我是否需要重写不同的功能,以不同的方式绘制,或者是否存在
我可以通过某种方式限制我的
OnRender
方法中的绘图 控制到特定区域? - 是否有更好的方法来实现我正在尝试做的事情(通过正确的裁剪和双缓冲任意绘制到控件)?
我尝试向 Canvas 子项添加形状,但这非常慢。
最佳答案
这个问题与 Canvas 渲染内容的方式有关。这意味着它的 child 可以在其实际区域之外呈现。但是,您可以通过设置属性来避免该默认行为
ClipToBounds
到 true
:
yourCanvas.ClipToBounds = true;
关于c# - 如何使用 OnRender 事件但仅呈现到 WPF 中的控制区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047640/