在WPF中闪烁窗口

本文关键字:窗口 闪烁 WPF | 更新日期: 2023-09-27 18:00:19

我是使用WPF c#的新手。当我点击按钮显示新窗口并隐藏当前窗口时,我注意到窗口会闪烁。我该如何防止这种情况发生?

我想做的是,当我更改窗口时,就像我在同一个窗口中,但内容不同,因为我拥有的每个窗口都有相同的标题。

这是我的代码,当我点击某个按钮时,它将重定向到另一个窗口。我的问题是,当指向另一个页面时,它会闪烁。我认为这是由窗口UI/内容引起的。

    private void button_cancel_Click(object sender, RoutedEventArgs e)
    {
        MainWindow  main = new MainWindow();
        main.Show();
        this.Hide();
    }

我试着创建了一个只包含两个按钮的新窗口。它没有闪烁。

在WPF中闪烁窗口

在我看来,你采取了错误的方法,与其创建一个新窗口并隐藏原始窗口,不如简单地交换当前窗口中当前活动的视图。

由于您没有发布任何代码,我不知道这对您来说会是什么样子,但是如果您使用MVVM,您只需将ContentControl绑定到您想要显示的视图。

当使用Caliburn Micro这样的框架来支持View Composition之类的东西时,这会变得容易得多。

您提到"每个窗口都有自己的功能",这让我认为您没有遵循WPF的最佳实践。。。您应该避免在视图代码中放置任何逻辑。正是因为这个原因,您最好重构并将此代码放置在视图模型中。

更新

很可能您正在UI线程上运行一个长时间运行的进程,这意味着长时间运行进程将阻塞UI线程(也必须创建窗口的线程),这可能是导致窗口闪烁的原因。

要解决此问题,请将任何长时间运行的进程移动到新线程(使用任务并行库)或Async/Await(如果您在目标.NET框架版本中有此功能)。