我正在开发一个交互式 WPF 图形/树工具,并将它们之间的节点和链接放置在画布中。节点是用户控件,链接只是线条形状,当前链接从一个节点的中心到另一个节点的中心。
当我希望节点稍微透明并且看到节点后面的链接时,就会出现问题。我认为最方便的解决方案是将剪辑或不透明蒙版应用于线条,因此它们不会被绘制在节点后面,但我无法为我的生活弄清楚如何?
基本上,我无法从节点中找出边界框几何形状,以用作线条的剪裁几何形状。当然,我也对替代解决方案感兴趣!
我正在开发一个交互式 WPF 图形/树工具,并将它们之间的节点和链接放置在画布中。节点是用户控件,链接只是线条形状,当前链接从一个节点的中心到另一个节点的中心。
当我希望节点稍微透明并且看到节点后面的链接时,就会出现问题。我认为最方便的解决方案是将剪辑或不透明蒙版应用于线条,因此它们不会被绘制在节点后面,但我无法为我的生活弄清楚如何?
基本上,我无法从节点中找出边界框几何形状,以用作线条的剪裁几何形状。当然,我也对替代解决方案感兴趣!
VisualTreeHelper.GetContentBounds() 方法似乎每次都返回 Empty。
这个问题的另一种解决方案是在
它使用边界框来查找交点以绘制从/到的线。
在我看来,您似乎在考虑解决方案。为什么不只是更改链接的逻辑,使线在节点的正确一侧开始/结束,而不是从中心开始???你应该只需要做更多的数学来完成这个。
也就是说,要获取 Visual 的边界框,您可以使用VisualTreeHelper::GetContentBounnds辅助方法。
我们做了类似的事情,我们的解决方案是将链接和节点放在不同的层上。
因此,如果您希望节点出现在链接上方并且链接的尖端被节点隐藏,您只需更改层的 z 顺序,使节点层位于链接层的前面。
作为图层,我们使用了 VisualHosts(您可以在此处找到 VisualHost 类),我们的节点和链接对象是 DrawingVisuals。
工作正常,您无需费心寻找节点的边界等。