【发布时间】:2009-10-29 15:34:10
【问题描述】:
我目前正在编写一个 WPF 用户控件 (PARENT),它可以包含多个子 (CHILD) 用户控件。我正在用折线连接 (CHILD) 控件。
为此,我需要 CHILD 用户控件的位置。 但是,我从 VisualTreeHelper.GetOffset 获得的位置为零。 WPF 可能还没有完成调整大小并将 CHILD 控件放置在内存中,因为当我将代码放入控件的 OnLoaded 事件处理程序中时,我确实获得了子控件的正确位置。
这是一个问题,因为即使在我加载了 PARENT 控件之后,我仍然希望能够添加 CHILD 控件并更新我的行。
我目前解决这个问题的方法是覆盖我的 CHILD 控件的 OnRender 并为我的 MAIN 控件引发一个事件,以便它知道它可以使用 VisualTreeHelper 来获取正确的值。
然而,这意味着我需要重新绘制线条,直到最后一个 CHILD 控件完成渲染。
我当前的解决方案感觉更像是一种解决方法而不是解决方案。如何“插入”WPF 渲染周期以从 VisualTreeHelper 获得准确的结果?
【问题讨论】:
-
不确定我是否提供了更好的选择,但您可以在 Loaded 优先级(在 Render 优先级的正下方)向调度程序调度一个操作,以便确定呈现已完成。有关更多信息,请参阅我的帖子:japf.fr/2009/10/measure-rendering-time-in-a-wpf-application
标签: wpf rendering render visualtreehelper