在呈现页面之前添加叠加

时间:2019-05-09 07:55:50

标签: c# wpf

我有一个使用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建议以较低的优先级执行渲染代码,但也会警告有关性能的问题。

是为我的问题推荐的一种选择,还是应该使用另一种方法?

0 个答案:

没有答案