我正在对页面进行一些更改(通过添加/删除控件),并且我只想在布局确定后继续我的代码(测量和排列所有元素等)。
我该怎么做呢?是否有一些我可以等待的任务会在布局完成时触发?
(现在使用 Yields 和其他技巧,但它们都让我感到肮脏)
我正在对页面进行一些更改(通过添加/删除控件),并且我只想在布局确定后继续我的代码(测量和排列所有元素等)。
我该怎么做呢?是否有一些我可以等待的任务会在布局完成时触发?
(现在使用 Yields 和其他技巧,但它们都让我感到肮脏)
您可以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();