C# WPF中的闪烁窗口

C# WPF中的闪烁窗口,c#,wpf,C#,Wpf,我对使用WPF c#是新手。当我点击按钮显示新窗口并隐藏当前窗口时,我注意到窗口闪烁。我怎样才能防止这种情况发生 我想做的是,当我更改窗口时,就像我在同一个窗口中,但内容不同,因为我拥有的每个窗口都有相同的标题 这是我的代码,当我点击某个按钮时,它将重定向到另一个窗口。我的问题是,当指向另一个页面时,它会闪烁。我认为这是由窗口UI/内容造成的 private void button_cancel_Click(object sender, RoutedEventArgs e) {

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

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

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

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

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

我觉得你采取了错误的方法,与其创建一个新窗口并隐藏原始窗口,不如换掉当前窗口中当前活动的视图

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

当使用Caliburn Micro这样的框架来支持视图合成之类的东西时,这变得容易多了


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

更新

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


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

您是否考虑过只使用一个窗口来更改窗口内容,而不是创建新窗口?每个窗口都有自己的功能。所以我决定不那样做。。如果可能的话,我只想防止我的标题闪烁。如果你知道怎么做,你能告诉我吗?非常感谢
窗口
WPF项目中的窗口不会自行闪烁。我只能假设您无意中使用了一些代码使它们闪烁。为了证明这一点,启动一个新项目并运行它。。。您将看到
窗口不会闪烁。因此,这里没有人能帮助你,因为我们无法重现你的问题。如果您创建一个最小的、完整的、简明的工作代码示例来演示您的问题,那么我们可以帮助您。然而,在你这样做之前,我认为这个问题无法回答,因此我投票决定结束这个问题。如果您提供代码,我很乐意撤销此操作。代码的长度是否会影响系统的性能?我的意思是,例如,对于每个窗口,我有成百上千行的代码,它会影响窗口的转换吗?当然,这取决于代码在做什么,但是您在错误的区域中查找。。。我用数百万行代码编写企业应用程序,性能很好。绝对没有窗口闪烁。但是,您将在UI线程以外的线程上执行任何长时间运行的进程。请参阅我的更新:您需要发布一些代码,以便有人进一步帮助您。(创建一个新问题)。