C#, Winforms и WebBrowser: почему не обрабатываются стили?
я пытаюсь "дешево и сердито" сделать splash-screen для своего приложения. (WinForms приложение на NET Framework 4.8)
Идея простая: на время загрузки данных показываем элемент WebBrowser, который Navigate() на какой то заранее подготовленный URL с картинкой "подождите, идёт загрузка!"
Но вот беда.
Эта надпись при загрузке данных - это просто картинка (на самом деле - это анимированный gif, чтобы пользоваель не скучал)
в барузере у меня эта картинка показывается по центру экрана:
а в приложении - нет, она показывается в левом верхнем углу, как будто контрол WebBrowser (System.Windows.Forms.WebBrowser) не понимает стилей.
Исходный html для показа в браузере:
<!DOCTYPE html>
<html>
<head>
</head>
<body style="min-height: 100vh;" bgcolor="red">
<div style="display: flex; justify-content: center; align-items: center; height: 100%; min-height: 100vh;">
<img src="BackgroundLoad.gif">
</div>
</body>
</html>
Как я показываю бразуер на форме: я просто обрабатываю событие Shown, и в него прописываю код
WebBrowser wb = new WebBrowser();
Controls.Add(wb);
wb.Dock = DockStyle.Fill;
wb.Navigate(new Uri("https://junecat.ru/Storage/oth/BackgroundLoad.html"));
На всякий случай - вот ссылка на проект на github.
У меня как то нет идей, почему WebBrowser себя так ведет. А у Вас?
Ответы (1 шт):
WebBrowser (Internet Explorer 11) не поддерживает display: flex так как это делают нормальные свежие браузеры.
Я не рекомендую вам использовать этот браузер. Но если очень хочется, то есть CefSharp (github, доступен в NuGet) и WebView2 (документация), оба работают на одинаковом хромовском движке.
Если у вас тормозит PictureBox, попробуйте включить буферизацию для формы.
public partial class Form1 : Form
{
//включение двойной буферизации на уровне окна
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return cp;
}
}
// ....
}
