#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(...);