zoukankan      html  css  js  c++  java
  • WP7页面的数值传递和对象传递

    一、Winodws Phone 7页面传递参数的方法:

    1 .使用HyperlinkButton的NavigateUri属性,直接将传递的参数添加在NavigateUri的属性中。例如

    <HyperlinkButton Content="音乐" Height="30" HorizontalAlignment="Left" Margin="68,65,0,0" Name="MusicshyperlinkButton" VerticalAlignment="Top" Width="200" NavigateUri="Musics?SongName=Cry"/>

    解释说明: NavigateUri="Musics?SongName=爱你一万年" 表示导航到一个别名为Musics的页面,并将一个参数SongName传递给导航的页面,SongName的值等于爱你一万年(如果要传递参数,需要使用?符号表示后面是要传递的参数)。

    上面的是将数据传到另一个页面,下面是在导航到的页面取得该数据,取得数据的方法可以通过调用NavigationContext的QueryString属性来获得。具体代码如下:

    txt_SongName.Text = NavigationContext.QueryString["SongName"];

    上面的代码表示获取变量名为SongName的参数值,并赋给一个textBox。这样便是实现了页面间传递数据,这是方式一。

    2.使用Button控件导航,调用  NavigationService可以实现传递参数。例如:

    NavigationService.Navigate(new Uri("Musics?SongName=Cry&SongAuthor=Rihanna", UriKind.Relative));

    代码解释:红色部分表示两个传递的两个变量SongName,SongAuthor。并分别进行了赋值,UriKind.Relative表示导航页面的路径是相对路径。

    传递参数成功之后便可以通过方法一的方式取得参数传递的值。(如果需要传递多个参数需要使用 & 将每个参数连接在一起)。

    3.修改<Application.Resources>.....</Application.Resources>中的代码实现别名传递数据。

    <nav:UriMapper x:Key="UriMapper">
                <nav:UriMapping Uri="Musics" MappedUri="/Views/MusicsPage.xaml"/>
    </nav:UriMapper>

    以上是不需要传递数据时的代码,如果要传递数据可以按照以下方式修改:

    <nav:UriMapper x:Key="UriMapper">
      <nav:UriMapping Uri="Musics/{song}" MappedUri="/Views/MusicsPage.xaml?SongName={song}"/>
    </nav:UriMapper>

    注意Musics/{song}中的{ }内容和SongName={song}中的{ }里面的内容要完全相同。

    上面的代码的意思是声明了一个名为SongName的变量,{ }的内容可以随意命名。

    如果要传递多个参数可以这样修改:

    <nav:UriMapping Uri="Musics/{song}&amp;{author}" MappedUri="/Views/MusicsPage.xaml?SongName={song}&amp;SongAuthor={author}"/>

    如果参数更多,依次添加变量即可。

    下面是 赋值过程。

    <HyperlinkButton Content="音乐" Height="30" HorizontalAlignment="Left" Margin="68,65,0,0" Name="MusicshyperlinkButton" VerticalAlignment="Top" Width="200" NavigateUri="Musics/Cry"/>

    代码说明NavigateUri="Musics/歌曲",Musics/后面即使要传递的参数值,即相当于:SongName=爱你一万年,之后便可以对其取值。取值方式和之前一样。

    二、Windows Phone 7传递对象的方法。

    NavigationService不能传递对象,它只能传递字符串类型的数据。

    所以以上传递数值的方法不可以用来传递对象。

    那么实现的方法是什么呢?可以使用App类的静态属性或者使用Singleton类。

    下面是使用App静态类属性传递对象的方法过程。

    首先添加一个类,MusicInformation,这个类包含两个属性:

    public class MusicInformation
    
        {
    
           //自动添加get,set方法
    
            public string SongName { get; set ; }//歌曲名
    
            public string SongAuthor { get; set; }//歌曲作者
    
        }

    添加完成后我们需要在App.xaml.cs中声明这个类(MusicInformation)的变量:

    public static MusicInformation musciinfor { get; set; }//定义MusicInformation类型的变量

    声明之后便可以调用这个静态属性,并对SongName 和SongAuthor 赋值。赋值过程可以在导航页面的响应事件中完成,例如Button_Click中。

    private void btn_Music_Click(object sender, RoutedEventArgs e)
            {
               App.musciinfor=new MusicInformation
               {
                SongName="爱你一万年.mp3",
                SongAuthor="刘德华"
               };//C#新的写法,可以不通过构造函数,直接对变量赋值
               NavigationService.Navigate(new Uri("Musics", UriKind.Relative));//导航到别名为Musics的页面。
            }

    导航到页面之后可以在别名为Musics的页面的Loaded事件中读取传递的对象数据。

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                if (App.musciinfor != null)//判断传递的对象数据是否为空,若不为空则进行赋值
                {
                    txt_Authory.Text = App.musciinfor.SongAuthor;
                    txt_SongName.Text = App.musciinfor.SongName;
                }
            }

    这样便实现了对象的数据传递。

    转自(On My Way.....博客,原文博客地址http://www.cnblogs.com/potential/archive/2012/11/03/2752826.html)

  • 相关阅读:
    第一节:SpringMVC概述
    SpringMVC【目录】
    Windows 系统快速查看文件MD5
    (error) ERR wrong number of arguments for 'hmset' command
    hive使用遇到的问题 cannot recognize input
    Overleaf支持的部分中文字体预览
    Understanding and Improving Fast Adversarial Training
    Django2实战示例 第十三章 上线
    Django2实战示例 第十二章 创建API
    Django2实战示例 第十一章 渲染和缓存课程内容
  • 原文地址:https://www.cnblogs.com/BlackRian/p/2816602.html
Copyright © 2011-2022 走看看