设为首页 收藏本站
查看: 787|回复: 0

Windows phone 7之页面导航

[复制链接]

尚未签到

发表于 2015-5-8 14:27:18 | 显示全部楼层 |阅读模式
  首先说一下WP7程序的呈现主体与关系,直接呈现给用户的界面是页面Page,每个Page是继承自PhoneApplicationPage的类,一个程序可以包含任意多个的Page页面,这些Page页面被放在一个共同的Frame下,Frame继承自PhoneApplicationFrame 。一个应用程序只能有一个Frame,创建程序时自动生成的App.xaml.cs文件中,有关于程序Frame初始化的代码,在InitializePhoneApplication()方法中,如下



// Do not add any additional code to this method
        private void InitializePhoneApplication()
        {
            if (phoneApplicationInitialized)
                return;
            // Create the frame but don't set it as RootVisual yet; this allows the splash
            // screen to remain active until the application is ready to render.
            RootFrame = new PhoneApplicationFrame();
            RootFrame.Navigated += CompleteInitializePhoneApplication;
            // Handle navigation failures
            RootFrame.NavigationFailed += RootFrame_NavigationFailed;
            // Ensure we don't initialize again
            phoneApplicationInitialized = true;
        }
  可以看到,注释提到,不要添加对于的代码到该方法中,所以我们也不要这么做。
当我们改变某个Page的属性时不会影响其他页面,但是一旦改变了Frame,那就会影响所有的页面,所以,我们应该认为Frame是只读的(虽然不是)。
  App类是程序主类,我没刻意用它来操作全局的属性,比如获取Frame,就是RootFrame属性。
  页面导航的方法
  页面导航一般分为两种方法,代码导航,和XAML声明导航
  1、代码实现
  NavigationService类提供了导航的功能,NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative));将这段代码放到Button点击事件中,点击Button就会跳转到NewPage.xaml页面,其中naviagte接受一个Uri类型的参数,这里传入字符串路径和路径类型UriKind,UriKind是个枚举型,一边页面导航是相对路径。WP7的特点的从根目录起,"/"开头表示根目录,依次输入文件路径,NewPage.xaml文件放在了根目录下,所以路径写为"/NewPage.xaml", 如果NewPage.xaml在根目录的View文件夹下,则路径为"/View/NewPage.xaml"。
  2、XAML实现
  可以利用导航控件如 HyperlinkButton,写法,NavigateUri属性用来设置路径。
  上述两种方式达到的目的是一样的,点击Button或HyperlinkButton就会跳转到NewPage.xaml
DSC0000.jpg
DSC0001.jpg
  WP7页面导航可以使用路径别名,也是从Silverlight继承过来的
  首先在App.xaml的文件上注册Windows.Navigation 命名空间,代码:mlns:navigate="clr-namespace:System.Windows.Navigation;assembly=Microsoft.Phone",
  然后注册资源代码如下:




        
            
        
   
  最后给Frame添加UriMapper :this.RootFrame.UriMapper = Resources["UriMapper"] as UriMapper; 将这句代码写到App类的构造函数里即可。
  使用方式
  NavigationService.Navigate(new Uri("NewPage", UriKind.Relative));
  
  路径中直接填别名就可以了,运行效果还是一样的。
  页面之间传递参数
  页面传递参数和网页中传递参数的方式一样,在路径的后面加上"?参数名=参数值"
  NavigationService.Navigate(new Uri("/NewPage.xaml?ID=10", UriKind.Relative));
  
  这样就导航到了NewPage.xaml并将ID及其值传递到了NewPage.xaml中。
  在NewPage.xaml中接受参数的方法
  NavigationContext的QueryString属性存储了上个页面中传递的所有参数下面代码获取ID并用MessageBox显示其值



if (NavigationContext.QueryString.ContainsKey("ID"))
            {
                MessageBox.Show(NavigationContext.QueryString["ID"]);
            }
  导航中使用了别名的话也可以将参数传递变得简单,修改资源为




        
            
            
        
   
  这样通过
  NavigationService.Navigate(new Uri("NewPage/10", UriKind.Relative));
  
  就可以将ID=10传递到NewPage.xaml,
  由于定义了两个导航到UriMapping,表现方式不一样,参数传递方世也不一样,加上默认不使用别名的方式,给Newpage.xaml传递参数,路径可以有三种写法
  "/NewPage.xaml?ID=10“,"NewPage?ID=10“,"NewPage/ID=10“,效果一样。
  
  页面传递参数是页面之间共享数据的一种方式,还有两种比较创建的数据共享方法,一种是全局变量,比如使用静态类,和APP类的静态成员,这种方法比较简单,会C#的童鞋都会使用,还有一种方式是使用IsolatedStorage类,这也是集成自Silverlight,叫做独立存储。独立存储在WP7程序的声明周期和数据共享起到最重要的作用,没有之一,所以,无论如何也要掌握,我将之留到介绍WP7程序的声明周期时详细讲。这里只写一下他最简单用法,不理解的童鞋别急。
  在MainPage.xaml.cs中写入



private void btnNavigate_Click(object sender, RoutedEventArgs e)
        {
            IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
            iss["ID"] = 10;
            NavigationService.Navigate(new Uri("NewPage", UriKind.Relative));
        }
  
  在NewPage.xaml.cs中写入



IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
            if (iss.Contains("ID"))
            {
                MessageBox.Show(iss["ID"].ToString());
            }
  最终运行和NavigationService跳转在路径后面加参数效果是一样的
DSC0002.jpg
  
  我新浪微博的昵称是"@马蔬菜",多多关注,谢谢
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65038-1-1.html 上篇帖子: (原创)Windows Phone 7开发随记---自定义按钮的实现 下篇帖子: Windows Phone 7 自定义事件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表