将 URI 传递给下一页上的 Web 浏览器控件
本文关键字:Web 浏览器 控件 一页 URI | 更新日期: 2023-09-27 18:32:11
嗨,我是Windows Phone开发的新手,我有一个通过WebClient下载RSS源的应用程序,它们通过Syndicationitem设置为列表框,现在我想在另一个页面上的Web浏览器控件中打开这些源(选定的一个),一个独立的页面,仅用于显示在列表框中单击的页面, 我的意思是 URI。问题是 URI 是在我的主页上的此调用中设置的.cs
通过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();
}
我知道想要设置一个 WebBrowser 控件而不是上面的 WebBrowserTaks 控件,该控件将位于单独的页面上,例如"preview.xaml",我可以像
NavigationService.Navigate(new Uri("/Preview.xaml", UriKind.Relative));
但是如何将带有此导航的 uri 传递到此页面上的 WebBrowser 控件?! 我在另一个页面上没有其他代码,它只是一个具有标题和 WebBrowser 控件的空页面。
在页面之间传递数据是通过在导航调用中使用查询字符串来完成的。例如,您可以修改选择更改处理程序以执行以下操作:
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 参数可能是值得的。