Загрузите новый HTML в браузер CefSharp, сохранив положение прокрутки
У меня есть браузер CefSharp в проекте WPF. Он отображает HTML, который в основном вводится пользователем. Когда html изменяется, мне нужно перезагрузить браузер, что я делаю следующим образом:
private void UpdateHTML(ChromiumWebBrowser browser) {
string outputHTML = this.PrepareHTMLFromUserInput();
string url = @"file:///" + this.GetResourcePath();
browser.LoadHtml(outputHTML, url);
}
Это работает просто отлично, но всегда прокручивает браузер до самого верха. Я хочу сохранить смещение у. Как я могу это сделать?
2 ответа
Частичный ответ: Обертывание браузера в UserControl, который, в свою очередь, находится внутри ScrollViewer, позволяет сохранить смещение y. Но теперь у меня появилась новая проблема - мне нужно отрегулировать высоту ScrollViewer и UserControl, чтобы не отставать от изменений высоты браузера.
<ScrollViewer x:Name="MyScrollViewer" Grid.Row="1">
<UserControl x:Name="WrappingUserControl" Height="2000">
<cefSharp:ChromiumWebBrowser x:Name="EditorBrowser" Address="about:blank"/>
</UserControl>
</ScrollViewer>
Одним из неоптимальных решений может быть запись в файл, загрузка его один раз и вызов перезагрузки:
browser.Load("c:\....mypath.html");
...
File.AppendText("<p>my html</p>");
...
browser.Reload();
Он сохранит положение прокрутки там, где его оставил пользователь.