我有一个使用TabControl
进行导航的WPF应用程序。当打开带有许多控件的页面时,应用程序会挂起几秒钟,然后再打开请求的页面。
我想在单击后立即在屏幕上添加一个叠加层,以使用户感觉到应用程序立即做出响应。用户现在经常单击多次,因为他们没有立即得到反馈。 由于渲染是在UI线程上完成的,因此如何在渲染开始之前显示叠加层?
此问题已被问过几次,答案不一。我希望有人可以指出解决此类问题的最佳方法。
ViewModel
internal void Navigate()
{
OverlayVisibility = Visibility.Visible;
// What to do here to show the overlay?
ViewModel currentPage = GetPage();
Pages.Add(currentPage);
CurrentPage = currentPage;
OverlayVisibility = Visibility.Collapsed;
}
查看
<TabControl Grid.Row="1" ItemsSource="{Binding Pages}" SelectedItem="{Binding CurrentPage}" DisplayMemberPath="Title" />
<Border Grid.Row="1" Background="Red" Visibility="{Binding OverlayVisibility}" />
选项1:Task.Delay
This answer建议运行等待1 ms的异步操作,该操作可以正常工作,但看起来像是黑客。
选项2:Dispatcher.PushFrame
This answer建议手动触发分派器,但建议不要使用它。
选项3:以较低的分派器优先级进行渲染
This article建议以较低的优先级执行渲染代码,但也会警告有关性能的问题。
是为我的问题推荐的一种选择,还是应该使用另一种方法?