WP7页面导航

框架与页面架构

Frame

—— 只有一个单独的 PhoneApplicationFrame

—— 包含一个或多个 PhoneApplicationPage

—— 也包含系统托盘和应用程序栏



Page

—— 包含标题 , 可以有独立的应用程序栏

—— Page 之间可以相互 Navigation(导航)


Windows Phone 是基于页面的导航 , 页面上没有状态


在 XAML 里 , 页面进行导航 HyperlinkButton 控件 NavigateUri="/Views/Music.xaml" 属性
在 CS 代码里 , 页面进行导航 NavigationService.Navigate(new Uri("/Views/Music.xaml",UriKind.Relative)); UriKind.Relatvie 指定了跳转为相对路径




路径别名

—— 在 APP.xaml 里 , 引入命名空间 xmlns:nav="clr-namespace:System.Windows.Navigation;assembly=Microsoft.Phone" ; 注意 , 所在应用程序集 ;assembly=Microsoft.Phone , 而不是 System.WIndows

—— 在 Application.Resources 节点里 , 添加 别名导航配置信息
<!Application Resources>
<Application.Resources>
<nav:UriMapper x:Key="ViewsUriMapper">
<nav:UriMapping Uri="Music" MappedUri="/Views/Music.xaml"></nav:UriMapping>
<nav:UriMapping Uri="Video" MappedUri="/Views/Video.xaml"></nav:UriMapping>
<nav:UriMapping Uri="Picture" MappedUri="/Views/Picture.xaml"></nav:UriMapping>
<nav:UriMapping Uri="WebBrowser" MappedUri="/Views/WebBrowser.xaml"></nav:UriMapping>
</nav:UriMapper>
</Application.Resources>


—— 去应用程序的构造函数里 , 映射别名的配置信息
App.xaml.cs 的 构造函数
把别名配置信息 , 映射进应用程序
RootFrame 每个应用程序 , 都有一个唯一的最顶级的 Frame
this.RootFrame.UriMapper = Resources["ViewsUriMapper"] as UriMapper


—— 使用别名进行导航 ; NavigateUri="Music" Music 就是 别名





页面传值

—— 普通传值

1 在要跳转的页面后面加参数 ; NavigateUri="/Views/Music.xaml?musicName=音乐名称2"
2 在接收页面的 xaml 文件里的 <phone:PhoneApplicationPage 里添加 “页面加载 事件“ Loaded="PhoneApplicationPage_Loaded"
3 在页面加载事件 添加处理代码 , 获取参数 ,赋值等操作
if (NavigationContext.QueryString.Count>0)
{
MusicNameTextBlock.Text = NavigationContext.QueryString["musicName"]
}


—— 别名传值

1 别名配置映射信息里 , 添加参数配置信息
<nav:UriMapping Uri="Music/{musicName}" MappedUri="/Views/Music.xaml?musicName={musicName}"></nav:UriMapping>
Music/{musicName} 这里的 musicName 必须和 ?musicName={musicName} 的一样 , 且区分大小写 .

2 使用带参数的别名
NavigateUri="Music/音乐1" , 这里的 "音乐1" 就是 别名配置信息里 musicName 的值 , 如果不想传递任何职 , 则 Music/ , 反斜杠必须存在




页面间传递对象
可以在 App.xaml.cs 全局应用程序里 , 加一个静态的属性



程序回退按钮
NavigationService.GoBack()



重写回退按钮
在要重写回退的 xaml 页面上 , 重写事件 BackKeyPress, 在处理代码里 e.Cancel = true 就可以重写回退按钮 , 取消了回退的实现 。

posted on 2012-02-21 13:17  多个马甲  阅读(235)  评论(0编辑  收藏  举报