将uri传递给下一页的webbrowser控件

时间:2013-09-21 12:27:24

标签: c# windows-phone-8 uri webbrowser-control

您好我是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控件?!我在这个其他页面上没有其他代码,它只是一个具有Title和WebBrowser控件的空页面。

1 个答案:

答案 0 :(得分: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参数可能是值得的。

相关问题