Загрузите новый 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();

Он сохранит положение прокрутки там, где его оставил пользователь.

Другие вопросы по тегам