我正在对页面进行一些更改(通过添加/删除控件),我只想在布局结束时(所有元素的测量和排列等)继续我的代码。
我该怎么做?是否有一些我可以等待的任务会在布局完成后触发?
(现在正在使用Yields和其他技巧,但它们都让我觉得很脏)
答案 0 :(得分:3)
您可以使用Task
围绕任何事件构建TaskCompletionSource<T>
。
在你的情况下,听起来UIElement.LayoutUpdated
可能是你想要的事件(不完全确定 - WPF布局细节不是我的强项)。
以下是一个例子:
public static Task LayoutUpdatedAsync(this UIElement element)
{
var tcs = new TaskCompletionSource<object>();
EventHandler handler = (s, e) =>
{
element.LayoutUpdated -= handler;
tcs.SetCompleted(null);
};
element.LayoutUpdated += handler;
return tcs.Task;
}
然后您可以使用此方法await
该事件的下一个实例:
await myUiElement.LayoutUpdatedAsync();