在導航期間解決用戶控制閃爍
在用戶控件之間導航通常會導致視覺閃爍,這是由於重複重新粉刷和使用背景圖像等因素。 即使有各種樣式的調整,此問題也可以持續。
>理解閃爍問題
>閃爍源於渲染過程。 每個用戶控件都會繪製其背景圖像,從而在兒童控制所在的位置創建臨時差距。 在孩子控制重新粉刷之前,這些差距短暫可見,並且與背景圖像形成對比會加劇效果。
>為什麼標準解決方案失敗
在這種特定情況下,和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中文網其他相關文章!