0

こんにちは、Windows Phone の開発は初めてです。ウェブクライアント経由で RSS フィードをダウンロードするアプリがあります。それらは syndicationitem 経由でリストボックスに設定されており、これらのフィード (選択したもの) を別のページの Web ブラウザー コントロールで開きたいと考えています。リストボックスでクリックされたページを表示するためだけのスタンドアロンページ、つまりuri. 問題は、私のmainpage.xaml.csのこの呼び出しでURIが設定されていることです

SyndicationItem sItem = (SyndicationItem)listBox.SelectedItem;

if (sItem.Links.Count > 0)
            {
                Uri uri = sItem.Links.FirstOrDefault().Uri;
                WebBrowserTask webBrowserTask = new WebBrowserTask();
                webBrowserTask.Uri = uri;
                webBrowserTask.Show();
            }

上記の WebBrowserTaks の代わりに、「preview.xaml」のような別のページにある WebBrowser コントロールを設定したいことがわかっています。次のようにナビゲーションを設定できます。

NavigationService.Navigate(new Uri("/Preview.xaml", UriKind.Relative));

しかし、このナビゲーションで uri をこのページの WebBrowser コントロールに渡す方法は?! この他のページには他のコードはありません。タイトルと WebBrowser コントロールを持つ空のページです。

4

1 に答える 1

0

ページ間でデータを渡すには、ナビゲーション呼び出しでクエリ文字列を使用します。たとえば、selection changed ハンドラーを次のように変更します。

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var myUri = new Uri("/Preview.xaml?url=" + Uri.EscapeDataString((string)listBox.SelectedItem), UriKind.Relative);

    NavigationService.Navigate(myUri);
}

クエリ文字列で渡されるデータには、エスケープ文字が含まれている必要があることに注意してください。

Web ブラウザー コントロールのみを含むプレビュー ページの簡単な例を生成しました。

<phone:PhoneApplicationPage>
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <phone:WebBrowser x:Name="webBrowser" />
    </Grid>
</phone:PhoneApplicationPage>

そして、ロード ハンドラをアタッチしました。

public partial class Preview : PhoneApplicationPage
{
    public Preview()
    {
        InitializeComponent();

        this.Loaded += (sender, e) =>
        {
            if (NavigationContext.QueryString.ContainsKey("url") &&
                Uri.IsWellFormedUriString(NavigationContext.QueryString["url"], UriKind.Absolute))
            {
                webBrowser.Navigate(new Uri(NavigationContext.QueryString["url"], UriKind.Absolute));
            }
            else
            {
                // TODO: Handle url parameter exception
            }
        };
    }
}

このアプローチでわかるように、ブラウザー コントロールをナビゲートして適切と思われるエラーを処理する前に、意味のある URL パラメーターがあることを検証する価値がある場合があります。

于 2013-09-21T17:48:20.887 に答える