Черные воспоминания при изменении размера хоста элемента wpf

У меня есть WPF UserControl что отображается в Winform как Element Host,

Когда я быстро изменяю размер экрана или изменяю его размер, я вижу черные фоновые изображения на заднем плане до тех пор, пока пользовательский контроль не достигнет соответствующего размера.

Я читал об этом в нескольких местах.

Все места, где я их читаю, говорят, что это происходит только в UserControl Load и приносят соответствующие решения.

Один вопрос, который я видел, говорил о том, что происходит на Resize. Но предлагаемое решение также доступно для загрузки.

Черный фон при изменении размеров elementhost

Я попытался изменить размер экрана, чтобы выполнить следующее: UserControl.CreateGraphics ();, он не оставляет черных линий, как сказал выше ответ.

Я думаю, это потому, что я использовал его в Resize, а не в Load.

Кроме того, я ничего не смог найти.

Если кто-то сталкивался с этим и нашел решение, я бы с удовольствием ответил.

2 ответа

Решение

Что помогло мне в итоге это следующие строки кода (в Winform):

    protected override void OnResize(EventArgs e)
    {
        this.SuspendLayout();
        base.OnResize(e);
        this.ResumeLayout();
    }

Мы обычно сталкиваемся с проблемами мерцания при разработке приложений для Windows с формами, имеющими много элементов управления. Очень аккуратный способ избавиться от этого мерцания - двойная буферизация всей формы и ее дочерних элементов управления. Тем не менее, это не ускорит управление рисованием, но будет некоторое время удерживать экран и отображать обновленный экран вместо мерцания. Для реализации этого нам нужно включить флаг WS_EX_COMPOSITED. Просто добавьте следующий код в код вашей формы.

C#:

protected override CreateParams CreateParams
{
   get 
    {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000; 
    // Turn on WS_EX_COMPOSITED
   return cp;
   }
}

VB.net:

Protected Overrides ReadOnly Property CreateParams() As CreateParams
 Get
    Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or &H2000000  
    Return cp 
  End Get
 End Property
Другие вопросы по тегам