我知道如何通过TransformToAncestor方法找到相对于其父级的控件位置,甚至可以根据该变换确定whether the control is visible to the user。
现在我需要在控件的位置检测更改。让我们暂时忽略效果和视觉变换,以保持简单。我只需要监控Visual.VisualOffset中的变化。这不是依赖属性,也没有关联的更改事件。
Visual.VisualOffset似乎只在安排阶段更新。也许UIElement.LayoutUpdated事件可以为我提供正确的通知。但那时它是一个没有参数的全球事件。每当有任何变化时,我都必须迭代所有受监视的视觉效果。每当用户拖动某些东西时,这种迭代每秒最多需要进行60次。
我想知道是否有一些侵入性较小的东西不会迫使我在全球范围内重新检查所有视觉效果。
这是一个例子。查看LazyControl来源。方法IsInView
使用TransformToAncestor
执行检查。每当某些方法发生变化时,我都需要调用此方法。