在WPF中闪烁的Windows

时间:2014-04-25 10:08:04

标签: c# wpf

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

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

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

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

我尝试过创建只包含两个按钮的新窗口。而且它没有闪烁。

1 个答案:

答案 0 :(得分:2)

听起来我觉得你采取了错误的方法,而不是创建一个新窗口并隐藏原始窗口,你应该简单地换掉当前窗口内当前活动的视图。

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

使用像Caliburn Micro这样的框架可以更容易地支持View Composition等。

你已经提到“每个窗口都有它自己的功能”,这让我觉得你没有遵循WPF的最佳实践......你应该避免在你的视图代码中放置任何逻辑,正是出于这个原因,你最好还是重构并将此代码放在视图模型中。

<强>更新

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

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