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

时间:2012-03-28 13:36:44

标签: c# wpf silverlight user-interface

我正在MSDN中阅读此UpdateLayout() method

它说:

  

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

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

我一直在使用Silverlight / WPF超过一年,但我仍然没有使用过这种方法。

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

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

但是,从上面来看:

  

UpdateLayout方法强制进行递归布局更新,并且是   经常没必要

this documentation

  

频繁调用InvalidateArrange,特别是UpdateLayout,   如果有大量元素,会产生重大的性能影响   存在于UI中。除非你绝对禁止调用此方法   需要精确的布局状态,以便随后调用其他API   你的代码。

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

答案 2 :(得分:0)

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