Windows Phone 7 頁面的數值傳遞和對象傳遞

來源:互聯網
上載者:User
一、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=愛你一萬年"/>

解釋說明: 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=愛你一萬年&SongAuthor=劉德華", 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/愛你一萬年"/>

代碼說明: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;            }        }

這樣便實現了對象的資料傳遞。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.