Можно ли изменить фоновый цвет элемента управления WebBrowser перед загрузкой содержимого?
У меня есть страница, содержащая элемент управления WebBrowser
, который часто обновляет контент. Я использую черный фон, но цвет по умолчанию перед загрузкой содержимого WebBrowser
является белым. Я мог бы изменить его, загрузив небольшую строку HTML с фоном, установленным на черный, но еще есть период времени, когда WebBrowser
отображается как белый, поэтому происходит какой-то мерцающий эффект.
Мой вопрос заключается в следующем: есть ли способ изменить цвет базового элемента управления WebBrowser
?
Я пробовал несколько решений, таких как скрытие WebBrowser
, пока контент не был загружен, но ни один из них не чувствует себя очень элегантно и не работает так хорошо.
Ответы
Ответ 1
Я понял, что работает в моем случае. Это не обязательно самый элегантный, но он выполняет свою работу.
Я установил значение по умолчанию Opacity
в WebBrowser
равным 0. Затем я присоединяю обработчик событий для события LoadCompleted
:
private void browser_Post_LoadCompleted(object sender, NavigationEventArgs e)
{
browser_Post.Opacity = 1;
}
Теперь, прежде чем загружать новую HTML-страницу, я устанавливаю Opacity
обратно в 0, чтобы он скрывал браузер, пока новый HTML отображается, поэтому нет мерцания фона. Когда HTML закончит загрузку, событие запустится, и новая HTML-страница будет отображаться как ожидалось.
Ответ 2
Я согласен с johnforrest. Гораздо лучше установить значение "Непрозрачность по умолчанию" на "0" и "Непрозрачность" на "Черный" в коде XAML. После этого в событии LoadComplete
private void dataBrowser_LoadCompleted(object sender,NavigationEventArgs e)
{
dataBrowser.OpacityMask = null;
dataBrowser.Opacity = 1;
}
Нет мерцания...!!
Ответ 3
Предполагая, что вы не хотите изменять фактическую непрозрачность в соответствии с другими предложениями, вы можете изменить цвет фона исходного экрана с помощью HTML:
this.WebBrowser1.Navigate("about:blank");
IHTMLDocument2 _doc = this.WebBrowser1.Document.DomDocument as IHTMLDocument2;
_doc.write("<html><body style=\"background: #f0f0f0\"></body></html>");
Ответ 4
Я обнаружил, что изменение непрозрачности или видимости элемента управления не полностью скрывает мерцание. Мое решение состоит в том, чтобы установить высоту элемента управления на 0, а затем reset обратно после загрузки, например:
double savedHeight = browser.ActualHeight;
browser.Height = 0;
browser.Navigated += (sender, e) =>
{
browser.Height = savedHeight;
}
browser.Navigate(...);