我在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();
它将保持用户留下的滚动位置。