Черный фон перед загрузкой элемента управления wpf при использовании ElementHost
-
21-09-2019 - |
Вопрос
Я использую WPF в WinForms с ElementHost.Когда форма загружается, на месте загрузки ElementHost появляется вспышка черного фона.Это выглядит как-то плохо.Любые предложения о том, как избавиться от этого?
Решение
Скройте элемент (Видимость = Скрытый), пока элемент управления WinForms не будет полностью загружен...
Другие советы
вам нужно сначала показать элемент управления с пустыми границами, чтобы избежать черного мерцания
if (!_control.Created && _control.BackColor != Color.Transparent)
{
_control.Bounds = Rectangle.Empty;
_control.Show();
}
// set control bounds and show it
Rectangle bounds = GetBounds(context, rect);
if (_control.Bounds != bounds)
_control.Bounds = bounds;
if (!_control.Visible)
_control.Show();
Я знаю, что на этот вопрос уже был дан ответ, и вопрос старый, но ни один из представленных ответов не помог мне, и после долгого времени устранения проблемы.Наконец я нашел более простой ответ.
Если вы создаете класс, наследуемый от Element Host и в исходном конструкторе.Вы можете установить событие загрузки для хост-контейнера.Хост-контейнер — это панель, поверх которой отображается дочерний элемент Hosts.После этого просто установите цвет фона контейнеров хостов на цвет фона родителей хостов элементов.
Так
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
public class MyElementHost : ElementHost
{
public MyElementHost()
{
this.HostContainer.Loaded += new RoutedEventHandler(HostPanelLoad);
}
public void HostPanelLoad(object sender, RoutedEventArgs e)
{
System.Drawing.Color parentColor = this.Parent.BackColor;
this.HostContainer.Background = new SolidColorBrush(Color.FromArgb(parentColor.A, parentColor.R, parentColor.G, parentColor.B));
}
}