剪切画布中的WPF元素

时间:2009-10-24 12:26:21

标签: wpf canvas line clipping bounding-box

我正在开发一个交互式WPF图形/树工具,并将它们之间的节点和链接放在画布中。节点是用户控件,链接只是线形,目前链接从节点的中心到另一个节点的中心。

当我希望节点稍微透明并且看到节点后面的链接时,会出现问题。 我认为最方便的解决方案是将剪裁或opacitymask应用于线条,因此它们不会在节点后面绘制,但我不能为我的生活弄清楚如何?

基本上我无法从节点中找出边界框几何体,以用作线条的剪切几何体。当然,我也对替代解决方案感兴趣!

3 个答案:

答案 0 :(得分:2)

VisualTreeHelper.GetContentBounds()方法似乎每次都返回Empty。

回答了此问题的替代解决方案

Connecting two WPF canvas elements by a line, without using anchors?

使用边界框来查找交叉点以从中绘制线条。

答案 1 :(得分:1)

在我看来,你似乎正在推翻解决方案。为什么不改变链接的逻辑,以便行在节点的正确的一侧开始/结束而不是从中心开始?你应该只需要做一些数学来完成这个。

也就是说,要获取Visual的边界框,您可以使用VisualTreeHelper::GetContentBounnds辅助方法。

答案 2 :(得分:0)

我们开展了类似的工作,我们的解决方案是将链接和节点放在不同的层上。

因此,如果您希望节点出现在链接上方并且节点隐藏链接的提示,您只需更改图层的z顺序,以便节点层位于链接层之前

作为图层我们使用VisualHosts(你找到一个VisualHost类here)我们的节点和链接对象是DrawingVisuals。

工作正常,您不必为寻找节点的边界等而烦恼。