我创建一个基于节点的编辑器,其中节点存储在画布中,每个节点都有多个表示输入/输出的椭圆元素。
我无法确定在哪里绘制每条线的起点和终点。目前,我获取节点视图(通过使用ItemGenerator.GetContainerFromItem),然后通过遍历可视树找到椭圆控件,并将点[0,0]从椭圆局部空间转换为画布局部空间,并绘制线画布空间。然后,只要节点位置发生变化,我就会刷新。
这在一定程度上起作用,但在以下情况下不起作用
1)节点的布局发生变化,例如当调整节点大小或更新其中一个面板时,导致椭圆相对于节点本身的移位/定位不同。2)有时当我添加大量节点时,节点视图不会因任何原因而被加载,因此走在可视树中无法找到省略号。
我尝试过的事情
- 使用layoutupdate事件解决问题1,但是为每个控件都会引发这些事件,因此速度非常慢。我只想在需要时更新,而不是在更新某些不相关的控件时更新。
- 通过调度具有后台优先级的更新来解决问题2,希望加载控件。这有帮助,但仍然可能偶尔失败
我想说点什么
将线P1绑定到[椭圆位置转换为画布空间]
任何想法?