调度程序有几个优先级来处理单个任务。我很确定您不能更改依赖属性回调的优先级。如果它们被数据绑定更改,它们将以 DispatcherPriority.DataBinding 优先级排队。您操纵一些依赖属性的值,这会导致布局/其他依赖属性发生变化。并且您想在第一次操作之后等到这些布局更新/更改被处理,然后对当前的 UI 状态执行一些操作?
WinForms 有针对这种情况的 DoEvents 函数,这会导致在正常代码执行继续之前处理所有 UI 事件。WPF 没有这样的内置函数,但您可以编写自己的 DoEvents:
public static void DoEvents()
{
if (Application.Current == null)
return;
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, (Delegate) (() => {}));
}
空委托是同步调用的,这意味着调用在委托被调度程序执行后返回。DispatcherPriority.Background 是一个非常低的优先级,以便在数据绑定、布局更新或渲染之后处理此调度程序调用。
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherpriority.aspx
所以在你第一次操作依赖属性之后和你想读取其他依赖属性之前调用 DoEvents() 并且应该完成。