现在的位置: 首页 > 综合 > 正文

WPF和Silverlight:FragmentNavigation、NavigationContext和QueryString

2013年05月10日 ⁄ 综合 ⁄ 共 1199字 ⁄ 字号 评论关闭

WPF的Frame导航有一个FragmentNavigation事件。发生在当导航地址中有”#”字样,”#”后面代表着对应元素的名称。导航后目标元素会被带入到视图中,当然Page中需要手动加ScrollViewer。这个和HTML中超链接在页面中的跳转原理是一样的。

 

比如我们在Frame中导航至Page1.xaml中的名叫“textBlock”的元素中,代码:

frame.Navigate(new Uri("/page1.xaml#textBlock", UriKind.Relative));

 

 

程序运行后,对应元素会被切换到视图最底端:

image

 

在FragmentNavigation事件中,通过FragmentNavigationEventArgs的Fragment属性(字符串类型)可以获取对应名称。

 

在Silverlight中,不仅支持WPF有的FragmentNavigation事件。同时还支持类似HTML URL中的Query string方式。当为导航至Page的地址加入了Query string后,可以通过Page的NavigationContext类型(System.Windows.Navigation命名空间内)查询具体的数据。NavigationContext只包含一个属性:QueryString(IDictionary<string, string>类型),通过它可以按照名称查询相应的值。

 

比如首先我们在Page对象的Loaded事件中枚举QueryString:

//lbx是界面上的一个ListBox,我们把QueryString显示在ListBox上。

lbx.ItemsSource = this.NavigationContext.QueryString.Select(i => i.Key + ":" + i.Value);

 

然后通过Frame的Navigate方法导航至Page,并且加入Query String:

//frame是界面上的Frame对象

//page1.xaml是上面代码中的Page

frame.Navigate(new Uri("/page1.xaml?name=Mgen&gender=male&id=177", UriKind.Relative));

 

结果:

image

 

当然上面的都是Silverlight内Frame控件切换Page的QueryString,和浏览器中地址栏的QueryString是没有关系的,如果需要获取浏览器的QueryString,则需要使用System.Windows.Browser命名空间内的HtmlPage.Document.QueryString属性,同样返回一个IDictionary<string, string>对象供查询或者枚举。

 

我们用同样的方法把他显示到界面上,然后这次在浏览器地址栏中属性程序路径加上QueryString,然后执行:

image

抱歉!评论已关闭.