我正在使用.Net 4.0 WebBrowser(来自System.Windows.Controls)。在我的应用程序中,用户可以修改html数据,webbrowser显示更新。然后,应用程序应自动滚动到显示的上一个元素。
我在Windows 7上使用WPF / c#4.0。
详细说明:
所以问题是:如何在WebBrowser中获得第一个可见的html元素?
您可能会说更新的html将不再具有记忆元素。对。但我在文档中有时间戳,并将使用记忆的html元素在新的html文档中找到最佳位置。
答案 0 :(得分:0)
我认为我找到了正确的使用方法。在刷新文档时,实际上有两种可能性来保留滚动位置。
假设以下成员:
WebBrowser _browser;
HTMLDocument HtmlDoc { get { return (HTMLDocument)_browser.Document; } }
(1)如果文档没有真正改变(在我的例子中只改变了样式)我使用当前滚动位置在更新后自动滚动:
:
_scrollPos = ((IHTMLElement2)(HtmlDoc.documentElement)).scrollTop;
:
HtmlDoc.parentWindow.scrollTo(0, _scrollPos);
(2)如果文件已经改变,我使用文件的左上方元素(已知结构)
:
IHTMLElement el = HtmlDoc.elementFromPoint(50, 0);
对el进行一些魔术(需要知道doc)并记住一些可用于在更新后搜索最佳元素的字符串。
string beforeRefresh = fromElement(el);
并在重新加载的html文档中搜索最佳的html元素。
IHTMLElement newEl = fromString(beforeRefresh);
newEl.scrollIntoView(true);
所以我缺少的实际方法是elementFromPoint()。其余的是“自定义逻辑”。