可以举个例子,说明什么时候应该使用UIElement.UpdateLayout()?

我正在阅读MSDN中的这个UpdateLayout()方法 。

它说:

确保为布局正确更新此元素的所有可视子元素。

但我不明白布局没有正确更新是什么意思。

我已经使用Silverlight / WPF超过一年了,但我还没有使用过这种方法一次。

那么有人可以给我一个需要使用这种方法的例子吗? 所以我真的能理解它的作用以及何时使用它?

如果您需要一个控件来立即完成其布局,您可能想要调用它,以便您可以基于此做一些事情。 例如,您可以在子控件上调用UpdateLayout ,以便它获得ActualHeightActualWidth ,如果您想根据它执行其他操作(例如,定位它,或绘制具有相应大小的内容)。

根据我的研究, UpdateLayout似乎是一种非常有力的方法,可以让布局上的所有控件都更新。 但是,在大多数情况下,布局系统足够智能且足够快,可以自行更新。 我读过的所有内容都让我相信只有在你进行大量的布局修改(添加控件并移动它们)时才需要这个调用,并且你需要显示一个特定的布局场景,而更新堆栈的其余部分是完成(但我还没有看到一个很好的例子来显示这个…正常的布局算法似乎就是那么好)。 这篇关于布局的MSDN文章应该有助于澄清事情。

但是,从上面来看:

UpdateLayout方法强制进行递归布局更新,并且通常不是必需的

和这个文件

如果UI中存在大量元素,则经常调用InvalidateArrange,特别是对UpdateLayout,会产生严重的性能影响。 除非您对代码中其他API的后续调用绝对需要精确的布局状态,否则请避免调用此方法。

最后直接回答你的问题。 这主要是通过内部UI布局逻辑自行完成的,您很可能永远不需要使用它。 通过上面的描述,在我看来,当你需要使用它时它会非常明显(并且它不适合那么多的线程,包括我自己曾经想过的)

我认为在构建控件时最常用。 例如:如果在代码中您感觉添加了新控件或发生了某些特定事件,您可以调用此UpdateLayout()来强制重新布局控件。 在某些情况下,WPF可能会认为UI已经足够变化,因此它会自动调用控件的UpdateLayout()。 我们都犯错误……如果你发现一个控件应该“重绘”或“重新排列”它的孩子,你可以尝试通过调用它的“UpdateLayout”强制它“刷新”。