• 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)

  • 相关阅读:
    Chrome 过滤广告插件暂替办法
    IE8.1将支持Firefox插件,Gecko和Webkit引擎
    Adobe与Facebook联手推出Flash开发工具
    Google Chrome Greasemetal
    vmware虚机下的linux集群
    新版Safari浏览器胜在速度
    Fedora 11 Beta发布
    Sun宣布本周裁员1500人 或为IBM收购做准备
    Opera Mobile9.7将支持Flash Lite和Google Gears
    Red Hat CEO:桌面Linux无用
  • 原文地址:https://www.cnblogs.com/BlackRian/p/2816602.html
Copyright © 2020-2023  润新知