您好我是Windows Phone开发的新手,我有一个应用程序可以通过webclient下载RSS源,它们通过syndicationitem设置为列表框,现在我想在webbrowser控件上打开这些源(选定的一个)另一个页面,一个独立页面,用于显示在列表框中单击的页面,我的意思是uri。问题是通过
在我的mainpage.xaml.cs上调用uriSyndicationItem 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控件的空页面。
答案 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参数可能是值得的。