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

时间:2016-04-07 09:23:13

标签: wpf cefsharp

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

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

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

2 个答案:

答案 0 :(得分:0)

部分答案:在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>

答案 1 :(得分:0)

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

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

它将保持用户离开它的滚动位置。