InvalidateVisual 是否以惰性方式工作?

Spo*_*ook 4 c# wpf rendering custom-controls invalidation

如果我调用InvalidateVisual自定义 WPF 控件,实际的布局评估和渲染过程何时发生?

立即或 - 与 WinForms 中类似 - 当我完成处理时?

小智 5

在线帮助回答您的问题:

InvalidateVisual的在线帮助:

该方法内部调用InvalidateArrange。

InvalidateArrange的在线帮助:

使元素的排列状态(布局)无效。失效后,元素的布局将被更新,这将异步发生,除非随后被 UpdateLayout 强制。

换句话说:InvalidateVisual不会立即生效;它会等到您当前的代码完成(除非您调用了UpdateLayout)。

您还可以查看 Microsoft 的参考源:http://referencesource.microsoft.com/#q=UIElement.InvalidateArrange。你会看到InvalidateArrange()没有调用任何阻塞代码;它立即返回。