在wpf中的启动窗口后打开新窗口

时间:2014-05-24 06:33:10

标签: wpf wpf-4.0

我有三个窗口,假设按此顺序出现:

  1. 启动窗口

  2. 选择窗口

  3. 工作窗口,这是主窗口

  4. 启动窗口应显示3秒钟,我已经这样做了,并且工作正常:

    private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            loadingThread = new Thread(load);
            loadingThread.Start();
        }
    
    
    private void load()
        {
            Thread.Sleep(3000);  
            //close the window
    
            this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate() { Close(); });
    
        }
    

    在该选择窗口出现之后,该工作窗口应该出现。

    Mainwindow代码在这里:

    public partial class MainWindow : Window
    {
    
        private MainWindowViewModel mainWindowViewModel;
    
        public MainWindow()
        {
            InitializeComponent();
            this.mainWindowViewModel = new MainWindowViewModel(this);
            base.DataContext = this.mainWindowViewModel;
            SplashWindow wnd = new SplashWindow("text");
            wnd.ShowDialog();
        }
    
    }
    

    告诉我如何按顺序打开窗口

    在选择窗口还有一件事,按下后我有一个按钮,我的工作窗口应该来了。

1 个答案:

答案 0 :(得分:1)

修改

不使用async& await

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        // Create and show SplashWindow
        SplashWindow splashWindow = new SplashWindow();
        splashWindow.Show();


        var thread = new System.Threading.Thread(p =>
        {
            System.Threading.Thread.Sleep(3000);

            Dispatcher.Invoke(() =>
            {
                // Create and show the SelectionWindow
                SelectionWindow selectionWindow = new SelectionWindow();
                selectionWindow.Show();

                // Hide the SplashWindow we previosly created
                splashWindow.Close();
            });
        });

        thread.Start();
    }
}

示例应用的要点:click here


我假设这是你项目的结构:

  1. 的App.xaml
  2. 主窗口
  3. SelectionWindow
  4. SplashWindow
  5. 首先,在App.xaml上删除StartupUri属性,使其显示如下:

    <Application x:Class="WpfApplication2.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Application.Resources>
    
        </Application.Resources>
    </Application>
    

    然后,在App.xaml.cs上,覆盖OnStartup

    async protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
    
        // Create and show SplashWindow
        SplashWindow splashWindow = new SplashWindow();
        splashWindow.Show();
    
        // Let's wait 3 seconds
        await Task.Delay(3000);
    
        // Create and show the SelectionWindow
        SelectionWindow selectionWindow = new SelectionWindow();
        selectionWindow.Show();
    
        // Hide the SplashWindow we previosly created
        splashWindow.Close();
    }
    

    然后,在SelectionWindow中,添加一个包含点击事件的按钮:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Create and show MainWindow
        var mainWindow = new MainWindow();
        mainWindow.Show();
    
        // Closes SelectionWindow
        this.Close();
    }