wpf - 为什么每次调整 WPF 窗口大小时都会出现黑色延迟?

标签 wpf

SE 上的其他问题解决了如何加快嵌套 UI 控件调整大小的速度,但是 - 如果没有任何控件怎么办?

当您拖动 WPF 窗口的边缘时,即使是没有内容的主窗口,在拖动过程中黑条也会短暂闪烁。这会产生一种糟糕的感觉——我不想给客户带来这种感觉:

WPF window being resized

它确实变得越来越慢,而且在它上面有一个完整的用户界面。这甚至没有涉及使用顶部或左侧边缘调整大小时的外观。 Windows 窗体 - 即使使用我构建的最重的 UI - 从一开始就看起来从来没有这么糟糕。

可以做些什么来使 WPF 窗口大小调整性能与 win 窗体相媲美?

(我在 AT Radeon HD 7470 上有 Windows 7 x64 和三重监视器系统。)

最佳答案

您可以更新您的图形卡并再次尝试,但这不会改变任何事情。原因很简单。我们有时会根据我们的计算机的速度/速度来看到这一点。有时它运行流畅,因为我们没有很多视觉效果要绘制。原因是当时在重绘过程​​中没有在图形卡中找到合适的背景颜色。您的驱动程序很好,这不仅仅是因为您使用 Wpf。其他技术在重绘背后使用相同的机制。

WPF 要做的第一件事就是清除将要重绘的脏区域。脏区的目的是减少发送到 GPU 管道输出合并阶段的像素数量。这是我们看到黑色的地方。此时窗口本身没有背景颜色,或者其背景颜色设置为透明,因此 GPU 绘制黑色背景。事情在 wpf 中异步运行,这很好。

要解决此问题,您可以为窗口设置一个固定颜色,例如“白色”。然后 WPF 系统将清除脏区域,但会自动用白色而不是黑色填充它。这通常有帮助。

匹配窗口颜色或最顶层的颜色。不要让 GPU 使用黑色,你应该做得很好。顺便说一句,Wpf 比 WinForm 快,所以别担心。

关于wpf - 为什么每次调整 WPF 窗口大小时都会出现黑色延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23014595/

相关文章:

wpf - 通用 ReactiveUserControl "cannot be edited in Design view"

c# - 设置 WPF 用户控件的样式

c# - 遍历 WPF 的 Xceed DataGrid 中的所有单元格?

c# - 无法将 DateTime 转换为字符串

c# - 如何在 MVVM 应用程序中执行 subview 模型中声明的命令?

c# - 如何以编程方式触发命令

wpf - 如何在 WPF ListView 中将 ItemTemplateSelector 与 HeaderTemplate 一起使用?

wpf - 您可以在 xaml 的 1 行中使用 Binding ValidationRule 吗?

c# - 我的 List<T>.Distinct() 有什么问题?

c# - 添加/启用装饰器后如何刷新/更新wpf窗口