【发布时间】:2018-07-03 11:25:03
【问题描述】:
我实际上有 2 个不同的闪烁问题:
(1) 当我创建一个边框样式设置为无的表单时,每当我调整窗口大小时,表单边缘都会出现大量闪烁。如果我尝试从左上角调整表单大小,这一点尤其明显。
(2) 当我最小化表单并从任务栏恢复它时,在左上角(通常是标题)的(非常)短暂的一秒钟内,您会看到一个矩形闪烁。我认为这可能是正常的 Windows 行为,但由于 WPF 删除了 Windows 最小化/最大化动画,它变得更加明显。如果我不能以这种方式直接修复闪烁,是否可以在不使用 hacky 解决方案(例如在表单最小化之前设置边框大小)恢复最小/最大动画?
感谢阅读!
【问题讨论】:
-
您是否运行了桌面窗口管理器 (dwm.exe)?启用 Aero 组合引擎后,调整大小应该相当流畅,但没有它,您可能会看到一些撕裂。在 Win32 层调整窗口大小和 WPF 重新呈现其内容(使用 或 不使用 DWM)之间也可能存在轻微延迟。这不是你能解决的问题。
-
是否有任何代码或动画作为对调整大小的响应而执行? (OnSizeChanged, WindowState) 那些真的可以减慢速度
-
我确实有一些事件,但我禁用了它们,因为我认为它们可能导致了问题,但它仍然会发生。我确实有 dwm 正在运行。我知道可能无法完全平滑地调整窗口大小(甚至 Visual Studio 本身也没有),但我将此行为与我安装的其他程序进行了比较,它们明显更平滑。例如,Firefox 和 Steam 都可以平滑地调整大小并且没有闪烁。我知道这不会是一个简单的解决方案,因为在我发布这篇文章之前我已经搜索了所有内容。这是 WPF 特定的问题吗?有没有更好的 GUI 框架可以使用?