获取Windows Phone 7 WebBrowser组件VerticalOffset

时间:2010-10-27 03:35:50

标签: windows-phone-7

我希望将用户的位置保留在他或她正在浏览的文档中,然后在他们从逻辑删除或会话之间返回时将其带回到该位置。

我的第一种方法是将浏览器组件包装在一个scrollviewer中,但事实证明它处理自己的滚动,而scrollviewer永远不会改变它的verticaloffset。

我的猜测是浏览器组件必须有一个滚动查看器或嵌入其中的类似内容。我需要获取verticaloffset并滚动到偏移量。

任何猜测如何到达那里?

我的下一个方法是javascript和c#的痛苦混合,以弄清楚它们在哪里......

3 个答案:

答案 0 :(得分:1)

由于构建WebBrowser控件的方式,您需要在Javascript中跟踪滚动,然后将位置传递给托管代码以处理该值的存储。

在恢复时,您需要让托管代码将滚动位置传递给Javascript函数以重置滚动位置。

这就是理论,但我还没有看过围绕WebBrowser中javascript滚动事件的功能。那是我唯一能看到可能出现问题的地方 听听你的表现会很高兴。

答案 1 :(得分:1)

我接受了马特的回答,但我想在这里提一些细节。我也会写博客,说明我完成后我是如何做到的。

由于WebBrowser组件本质上是一个黑盒子,因此您没有我想要的那么多控件。话虽如此,可以获取并设置垂直偏移量。

Javascript可以让您询问价值,但不同的浏览器会在HOW上使用不同的变体来询问。对于这种情况,我只需要一个浏览器担心。

首先,我制作了几个简单的javascript函数:

function getVerticalOffset() {
    return document.body.scrollTop;
}

function setVerticalOffset(offset) {
    document.body.scrollTop = offset;
}

接下来,我使用浏览器对象上的InvokeScript方法调用WebBrowser。

当我完成完整的写作后,我会在这里发布一个更新链接到我的博客。

答案 2 :(得分:1)

我一直在写电子书阅读器并有类似的问题。设置滚动位置的代码很容易找到。

设置垂直滚动位置的代码:

string script = string.Format("window.scrollBy(0,{0});", "put your numeric value here");
        wb_view.InvokeScript("eval", script);

谷歌在寻找获取当前滚动位置值的解决方案方面没有太多帮助。缺乏任何javascript知识,我花了将近两个小时才能做到正确。

获取垂直滚动位置的代码:

var vScroll = wb_view.InvokeScript("eval",
            "var vscroll = window.pageYOffset; vscroll.toString();");