Подтвердить что ты не робот

Можно ли изменить фоновый цвет элемента управления WebBrowser перед загрузкой содержимого?

У меня есть страница, содержащая элемент управления WebBrowser, который часто обновляет контент. Я использую черный фон, но цвет по умолчанию перед загрузкой содержимого WebBrowser является белым. Я мог бы изменить его, загрузив небольшую строку HTML с фоном, установленным на черный, но еще есть период времени, когда WebBrowser отображается как белый, поэтому происходит какой-то мерцающий эффект.

Мой вопрос заключается в следующем: есть ли способ изменить цвет базового элемента управления WebBrowser?

Я пробовал несколько решений, таких как скрытие WebBrowser, пока контент не был загружен, но ни один из них не чувствует себя очень элегантно и не работает так хорошо.

4b9b3361

Ответ 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(...);