2012-08-07 59 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()方法。