在导航期间解决用户控制闪烁
在用户控件之间导航通常会导致视觉闪烁,这是由于重复重新粉刷和使用背景图像等因素。 即使有各种样式的调整,此问题也可以持续。
>理解闪烁问题
>闪烁源于渲染过程。 每个用户控件都会绘制其背景图像,从而在儿童控制所在的位置创建临时差距。 在孩子控制重新粉刷之前,这些差距短暂可见,并且与背景图像形成对比会加剧效果。
>为什么标准解决方案失败
在这种特定情况下,和OptimizedDoubleBuffer
等常见的双重屏障方法在这种特定情况下证明是无效的。UserPaint
>
根本原因在于Windows处理控制层次结构渲染的方式。 激活该表单的可以在形式级别上进行双重屏障,其中包括所有子女控件。这可以解决闪烁。
WS_EX_COMPOSITED
<code class="language-csharp">protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Enable WS_EX_COMPOSITED return cp; } }</code>
这些额外的优化可以显着提高绘画性能:
背景imagelayout:
Format32bppPArgb
ws_clipchildren:WS_CLIPCHILDREN
<code class="language-csharp">protected override CreateParams CreateParams { get { var parms = base.CreateParams; parms.Style &= ~0x02000000; // Disable WS_CLIPCHILDREN return parms; } }</code>
> >减少儿童控制的数量大大提高了绘画速度。考虑直接在用户控件的方法中绘制更简单的元素(文本或图像),而不是依靠众多子控制。
以上是如何消除导航期间用户控件的闪烁?的详细内容。更多信息请关注PHP中文网其他相关文章!