我们有一个非常大的子控件,它会进行大量渲染以显示其细节,但由于该控件只有一部分实际上是可见的(它被层次结构更上层的东西剪裁,不一定是它的直接父级)我们只想渲染OnRender 调用期间的可见部分。
考虑下图。孩子是 100x50,但可见区域是一个矩形,在孩子坐标中具有 (10,5) 和 (100,50) 的角。这就是我们正在寻找的区域。
注意:您不能简单地进行从子级到父级的坐标转换并测试裁剪,因为它可能不是进行裁剪的父级。
考虑在 ScrollViewer 中嵌套的 Canvas 控件。内部 Canvas 可以很好地完全位于外部 Canvas 的边界内,但外部 Canvas 可能会被 ScrollViewer 裁剪,因此内部 Canvas 在视觉上也被它裁剪。
遍历视觉树并测试每个父级会降低性能。
那么 WPF 中是否有任何内置的东西可以获取控件可见区域的边界?