Черные воспоминания при изменении размера хоста элемента 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