我想在我的应用程序中显示启动屏幕,因为我必须读取磁盘上的一些数据并相应地自定义界面。如果不是这样的话,效果将是先加载接口然后对其进行自定义,并且效果清晰可见。因此,我的想法是定义一个globla初始屏幕窗口并:


在构造函数中。

WindowState = WindowState.Minimized;  // <---- for the mainWindow
splashScreen.Show();

在WindowViewBase_Loaded事件中

SetInterfaceElements(); // <-------interface customization (1)
splashScreen.Close();
WindowState = WindowState.Maximized; // (2)
Activate(); // <------------------------to put focus on



最后,效果始终是相同的,因此(1)和(2)之间存在差距。

所以我想到了一个刷新问题。我试图用UpdateLayout强制它,但是没有运气。因此,从here开始的另一种解决方案却始终相同。我错过了什么吗?

最佳答案

在mainView构造函数中

public MainView()
{
  SplashScreen splashScreen = new SplashScreen();
  splashScreen.Show();
  ...
}


然后

Action emptyDelegate = delegate { };
bool IsContentRendered = false;
private void WindowViewBase_Loaded(object sender, RoutedEventArgs e)
{
        SetInterfaceElements();
        Dispatcher.Invoke(emptyDelegate, DispatcherPriority.Render);<---to refresh
        IsContentRendered = true;
}


最后

private void WindowViewBase_ContentRendered(object sender, EventArgs e)
{
 if (IsContentRendered)
    {
        if (splashScreen != null)
         splashScreen.Close();
        WindowState = WindowState.Maximized;
        Activate();
    }
}

关于c# - 如何正确显示启动画面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36688314/

10-12 22:46