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

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

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

有帮助吗?

解决方案

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

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

连接两个WPF画布元素一行,不使用锚点?

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

其他提示

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

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

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

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

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

工作正常,您无需为找到节点的边界等而烦恼。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top