Windows Phone 8.1 – 通过外部ScrollViewer元素处理WebView垂直滚动
问题
我必须在Windows Phone 8.1应用程序中的ScrollViewer
中显示WebView
,具有以下要求:
- 应根据其内容调整
WebView
高度。 -
WebView
垂直滚动应由外部ScrollViewer
处理。 -
WebView
应处理水平滚动,缩放(缩放缩放),文本选择(使用默认复制按钮)和链接导航。
在下面的图片是我的模拟布局(左侧)和类似function的最佳示例 – 这将是一个内置的邮件应用程序(在右侧)
示例XAML布局:
我尝试了什么
测量HTML内容并调整WebView高度 – 这部分工作 ,通过几次调整,我能够为WebView
元素设置正确的高度。
订阅WebView中的Border元素 – 没有用 。 这里的问题是,在Windows Phone 8.1中,似乎WebView
组件没有可视子元素(至少不是DependencyObject
的)
我也尝试过使用ManupulationMode
和IsHitTestVisible
属性但没有成功 。
更新为所需的WebView
function添加了文本选择和复制按钮。 不知何故在原始问题内容中错过了它。
我一直面临这个问题,部分解决了一些问题(不包括文本选择)。
基本上,为了能够使用包含webview的滚动查看器,你需要拖动一些东西,所以我使用一个高度和宽度与webview相同的矩形。
现在我们需要注入一些css和javascript来使webview高度适应内容(我在另一个stackoverflow线程上找到了一些代码示例,忘记跟踪它来自哪里)
string htmlFragment = @" " + original + @" ";
然后添加webview webscript通知事件以确定webview(和矩形)的渲染高度:
void WebviewContent_ScriptNotify(object sender, NotifyEventArgs e) { if (e.Value.Contains("rendered_height")) { if (valuePair != null && valuePair[0] == "rendered_height") { double renderedHeight = double.Parse(valuePair[1]); WebviewContent.Height = renderedHeight; } } }
我设法允许此解决方案能够使用此方法(loadLink javascript方法)单击内容中的某些链接:
private async void RecWeb_Tapped(object sender, TappedRoutedEventArgs e) { Point p = e.GetPosition(WebviewContent); int x = Convert.ToInt32(pX); int y = Convert.ToInt32(pY); string[] size = { x.ToString(), y.ToString() }; await WebviewContent.InvokeScriptAsync("loadLink",size); }
也许你可以从那里为它添加一个事件处理程序,用于选择文本问题。 使用此解决方案的要点也是在javascript中查找等效的事件处理程序。
我检查了一下,尝试了一些东西,但无法按照你想要的方式使它工作。 提出不同的设计可能更容易。 基本上,不包括外部ScrollViewer
。
-
一个选项(可能有点hacky,尚未测试)是通过一些JS将内容注入页面,并仅使用
WebView
。 -
如果您的内容很小,您可以将其保留在页面顶部,删除
ScrollViewer
并让WebView
处理所有内容。WebView
将更小,但它可以正常工作。
这些只是不同设计的一些例子。 如果你告诉我他们为什么不工作,或者你给我更多关于你实际问题的信息,我可能会想出一些更合适的东西。
您是否尝试将WebView的高度属性设置为自动?