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

#c# #silverlight #windows-phone-7

#c# #silverlight #windows-phone-7

Вопрос:

У меня есть страница, которая содержит 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:

Предполагая, что вы не хотите изменять фактическую непрозрачность в соответствии с другими предложениями, вы можете изменить цвет фона начального отображения с помощью HTML:

   this.WebBrowser1.Navigate("about:blank");
  IHTMLDocument2 _doc = this.WebBrowser1.Document.DomDocument as IHTMLDocument2;
  _doc.write("<html><body style="background: #f0f0f0"></body></html>");
  

Ответ №3:

Я согласен с johnforrest. Гораздо лучше установить непрозрачность по умолчанию равной 0, а маску непрозрачности — черной в коде XAML. После этого в событии loadComplete;

 private void dataBrowser_LoadCompleted(object sender,NavigationEventArgs e)
{
    dataBrowser.OpacityMask = null;
    dataBrowser.Opacity = 1;
}
  

Нет мерцания …!!

Ответ №4:

Я обнаружил, что изменение непрозрачности или видимости элемента управления не полностью скрывает мерцание. Мое решение — установить высоту элемента управления равной 0, а затем сбросить его обратно после загрузки, вот так:

 double savedHeight = browser.ActualHeight;
browser.Height = 0;

browser.Navigated  = (sender, e) =>
{
    browser.Height = savedHeight;
}

browser.Navigate(...);