1

我正在对页面进行一些更改(通过添加/删除控件),并且我只想在布局确定后继续我的代码(测量和排列所有元素等)。

我该怎么做呢?是否有一些我可以等待的任务会在布局完成时触发?

(现在使用 Yields 和其他技巧,但它们都让我感到肮脏)

4

1 回答 1

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();
于 2013-01-03T03:40:48.793 回答