等待XAML布局完成

时间:2013-01-01 14:45:01

标签: wpf xaml asynchronous windows-8

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

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

(现在正在使用Yields和其他技巧,但它们都让我觉得很脏)

1 个答案:

答案 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();