0

嗨,我是 Windows Phone 开发的新手,我有一个应用程序可以通过 webclient 下载 rss 提要,它们通过 syndicationitem 设置为列表框,现在我想在另一个页面上的 webbrowser 控件中打开这些提要(选定的提要),一个独立的页面,仅用于显示在列表框中单击的页面,我的意思是 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 一个 WebBrowser 控件,它将位于一个单独的页面上,如“preview.xaml”我可以设置导航

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

但是如何将带有此导航的 uri 传递给此页面上的 WebBrowser 控件?!我在其他页面上没有其他代码,它只是一个具有标题和 WebBrowser 控件的空页面。

4

1 回答 1

0

在页面之间传递数据是通过在导航调用中使用查询字符串来完成的。例如,您将修改您的选择更改处理程序以执行以下操作:

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 回答