4

Windows 8 アプリで背の高い HTML ページを確実にスクロールする方法を探しています。私が作成しているアプリは、パッケージ内の XML ファイルから HTML 形式のテキストを取得し、現在、SplitPage の片側にある WebView に表示しています。

これはすべて正常に機能していますが、WebView の動作方法が原因で、スクロールのフォーカスに問題があります。WebView を含む SplitPage が最初にロードされると、WebView は (スクロール ホイールを使用して) スクロールするためのフォーカスを持ち、期待どおりに動作しますが、他の項目を含む ListView は、クリックしてもスクロール ホイールでスクロールしません。ユーザーがホーム画面に戻ってから同じ SplitPage に戻ると、スクロール ホイールで WebView をスクロールできません。

WebViewBrush の使用を検討しましたが、試してみたところ、うまくいかないと思います。WebView を画面外または折りたたんでレンダリングし、その WebViewBrush を画面上の Rectangle に描画する方法はないようです。

データを表示する別の方法、または WebView または WebViewBrush を適切に再生するためのアイデアはありますか?

4

2 に答える 2

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();

移動中のページの「Frame 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() メソッドが欠落しているため、webview を使用するすべてのページでこれを行う必要があるようです。

于 2012-09-19T23:25:21.157 に答える
0

これが機能せず、html が任意でない場合は、html を解析し、XAML プラットフォームにネイティブなコントロールを使用して再構築することができます。すぐに使用できるプロジェクトがあるかどうかはわかりませんが、HTML Agility Packが役立つ可能性があります。

于 2012-08-08T16:38:06.763 に答える