将新的html加载到CefSharp浏览器中,同时保留滚动位置



我在WPF项目中有一个CefSharp浏览器。它显示的是主要由用户输入的html。当html发生变化时,我需要重新加载浏览器,我正在按如下方式进行:

private void UpdateHTML(ChromiumWebBrowser browser) {
  string outputHTML = this.PrepareHTMLFromUserInput(); 
  string url = @"file:///" + this.GetResourcePath();
  browser.LoadHtml(outputHTML, url);
}

这很好,但它总是将浏览器滚动到顶部。我想保留y偏移量。我该怎么做?

部分答案:将浏览器封装在UserControl中,而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>

一个次优解决方案可能是写入文件,加载一次,然后调用Reload:

browser.Load("c:....mypath.html");
...
File.AppendText("<p>my html</p>");
...
browser.Reload();

它将保持用户留下的滚动位置。

最新更新