有没有办法减少或防止使用WPF时形式闪烁?

时间:2018-01-24 12:05:23

标签: c# wpf

我实际上有2个不同的闪烁问题:

(1)当我创建一个边框样式设置为none的表单时,无论何时我调整窗口大小,表单边缘都会有大量的闪烁。如果我尝试从左上角调整表单大小,这一点尤为明显。

(2)当我最小化表格并从任务栏恢复它时,对于标题通常在左上角的(非常)短暂的秒,你可以看到矩形闪烁。我认为这可能是正常的Windows行为,但由于WPF删除窗口最小化/最大化动画,它变得更加引人注目。如果我无法通过这种方式直接修复闪烁,是否可以在不使用hacky解决方案的情况下恢复最小/最大动画,例如在窗体最小化之前设置borderize?

感谢阅读!

1 个答案:

答案 0 :(得分:0)

我正在解决您在#1中提到的同一问题,它不是特定于无边界WPF表单的(尽管它似乎取决于绘制时间和窗口样式,当您更改边界类型时,两者都可能会改变)。原生应用和全边框应用也会发生这种情况。

在Windows 10中,当您使用左侧和/或顶部窗口边框时,您实际上可以在Windows资源管理器中看到相同类型的闪烁。

从我的调查看来,至少有两个重叠的原因,一个原因可以追溯到Aero以前的日子,另一个原因是Aero补充的。 Aero之前的原因可以解决,但是Aero仍然只能部分解决。请参阅此综述问题/答案,该问题/答案汇集了有关该主题的10年帖子,并提供了一些新见解(太长了,无法在此问题中粘贴内容)。享受:

How to smooth ugly jitter/flicker/jumping when resizing windows, especially dragging left/top border (Win 7-10; bg, bitblt and DWM)?

是的,我知道惯例是将原始问题标记为重复,而不是将一个问题链接到另一个问题,但是这种情况有点不寻常。我的综述文章提到了有关此主题的30多个问题,并汇集了其中的最重要想法,但并不包括原始问题中的所有想法……那是不切实际的。因此,我实际上不想看到原始问题标记为“ dups”,也不是我的,因为无论哪种方式,有用的信息都会丢失。这是因为调整窗口大小是一个广泛的话题。这个问题涵盖某些方面,我的问题涵盖其他方面。