WPF跟踪元素位置

时间:2013-08-05 23:38:28

标签: wpf transformation

我创建一个基于节点的编辑器,其中节点存储在画布中,每个节点都有多个表示输入/输出的椭圆元素。

我无法确定在哪里绘制每条线的起点和终点。目前,我获取节点视图(通过使用ItemGenerator.GetContainerFromItem),然后通过遍历可视树找到椭圆控件,并将点[0,0]从椭圆局部空间转换为画布局部空间,并绘制线画布空间。然后,只要节点位置发生变化,我就会刷新。

这在一定程度上起作用,但在以下情况下不起作用

1)节点的布局发生变化,例如当调整节点大小或更新其中一个面板时,导致椭圆相对于节点本身的移位/定位不同。

2)有时当我添加大量节点时,节点视图不会因任何原因而被加载,因此走在可视树中无法找到省略号。

我尝试过的事情

- 使用layoutupdate事件解决问题1,但是为每个控件都会引发这些事件,因此速度非常慢。我只想在需要时更新,而不是在更新某些不相关的控件时更新。

- 通过调度具有后台优先级的更新来解决问题2,希望加载控件。这有帮助,但仍然可能偶尔失败

我想说点什么

将线P1绑定到[椭圆位置转换为画布空间]

任何想法?

1 个答案:

答案 0 :(得分:0)

很可能你不需要做任何你正在做的事情。

请参阅我的示例,了解在WPF(MVVM)中执行此操作的正确方法

1 / 2 / 3 / 4