2012-08-07 36 views
4

我正在寻找一种可靠地在Windows 8应用程序中滚动高大的HTML页面的方法。 我正在制作的应用程序从包中的XML文件获取一些HTML格式的文本,并且当前将其显示在SplitPage一侧的WebView中。在Windows 8中使用WebView进行滚动问题

这一切都工作正常,但由于WebView的工作方式,我遇到焦点滚动问题。当第一次加载包含WebView的SplitPage时,WebView具有滚动焦点(使用滚轮)并按预期工作,但包含其他项目的ListView不会使用滚轮滚动,即使点击滚动轮也是如此。当用户返回到主屏幕,然后返回到同一个SplitPage中时,WebView无法使用滚轮进行滚动。

我看过使用WebViewBrush,但从我试过的东西我不认为它会为我工作。似乎没有任何方式将WebView呈现在屏幕外或折叠,然后在屏幕上的矩形上绘制WebViewBrush。

任何想法的另一种方式来显示数据,或让WebView或WebViewBrush发挥很好?

+0

WebView是否在ListView中? – 2012-08-08 16:36:29

+0

它位于ScrollViewer内部的Grid中。 – Jonathan 2012-08-09 09:11:52

回答

0

如果这不起作用,并且您的html不是任意的,您可以尝试解析html并使用XAML平台的本机控件重构它。不确定是否有任何项目可以开箱即用,但也许HTML Agility Pack可以提供帮助。

+0

你会如何应用CSS? – 2012-12-27 16:30:52

+0

你需要解析它。不确定HTML敏捷包是否会执行它(从未使用过)。如果它只是任意的HTML - 你最好用WebView/WebViewBrush渲染它,或者忽略CSS。 – 2012-12-28 09:42:28

1

看来webview控件在根页面上正常工作,但无法在多个导航场景中保持焦点。这是我用来解决问题的解决方法。

首先,我做了一个新的类作为导航参数传递。

class DetailPayload 
{ 
    public Frame DetailFrame { get; set; } 
    public string Title { get; set; } // may not be important to your software 
} 

创建一个新的根帧时我导航到有问题的web视图页面并传递一个DetailPayload对象。

DetailPayload dpl = new DetailPayload(); 
dpl.DetailFrame = this.Frame; 
dpl.Title = itemTitle; 

Frame rootFrame = new Frame(); 
rootFrame.Navigate(typeof(DetailPage), dpl); 

Window.Current.Content = rootFrame; 
Window.Current.Activate(); 

我将旧框架存储在我正在导航到的页面中的“框架backFrame”中。

DetailPayload dpl = (DetailPayload)navigationParameter; 
this.backFrame = dpl.Frame; 

我更改后退按钮控件以触发不同的事件,并删除禁用它的部分,如果它是根框架。

<Button x:Name="backButton" Style="{StaticResource BackButtonStyle}" Click="backButton_Click"/> 

然后我在backButton_Click函数中调用此函数返回上一页。

Window.Current.Content = this.backFrame; 
Window.Current.Activate(); 

看来我不得不这样做,因为它不是一个实际的控制,因此缺少.Focus()方法。