C#, Winforms и WebBrowser: почему не обрабатываются стили?

я пытаюсь "дешево и сердито" сделать splash-screen для своего приложения. (WinForms приложение на NET Framework 4.8)

Идея простая: на время загрузки данных показываем элемент WebBrowser, который Navigate() на какой то заранее подготовленный URL с картинкой "подождите, идёт загрузка!"

Но вот беда.

Эта надпись при загрузке данных - это просто картинка (на самом деле - это анимированный gif, чтобы пользоваель не скучал)

в барузере у меня эта картинка показывается по центру экрана:

а в приложении - нет, она показывается в левом верхнем углу, как будто контрол WebBrowser (System.Windows.Forms.WebBrowser) не понимает стилей.

not in center

Исходный 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 шт):

Автор решения: aepot

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;
        }
    }

    // ....
}
→ Ссылка