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