程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> windows phone頁面間傳遞數據

windows phone頁面間傳遞數據

編輯:更多關於編程

     頁面間傳遞數據包括兩個問題
    1、如何從源頁面傳遞數據到目標頁面?
    下面例子提供解決上面問題的方案。
    源頁面MainPage.xaml內容區域包含一個TextBlock,如
    <TextBlock HorizontalAlignment="Center" Name="txt1" Text="navigate to 2nd page" VerticalAlignment="Center" ManipulationStarted="txt1_ManipulationStarted" />
    MainPage.xaml.cs代碼如下所示:
    namespace PhoneApp2
    {
    public partial class MainPage : PhoneApplicationPage
    {
    Random rand = new Random();
    // 構造函數
    public MainPage()
    {
    InitializeComponent();
    }
    private void txt1_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
    String destination = "/Page1.xaml";
    if (this.ContentPanel.Background is SolidColorBrush)
    {
    Color clr = (this.ContentPanel.Background as SolidColorBrush).Color;
    destination += String.Format("?Red={0}&Green={1}&Blue={2}",clr.R,clr.G,clr.B);
    }
    this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));//導航至指定頁面
    e.Complete();
    e.Handled = true;
    }
    protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
    {//當觸摸到頁面裡textblock以外的部分時,contentpanel的背景會變成隨機顏色。
    this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)));//設置背景顏色
    base.OnManipulationStarted(e);
    }
    }
    }
    目標頁面Page1.xaml代碼重寫了OnNavigatedTo方法,如下所示:
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//當該函數被調用時,頁面的構造函數已經執行完畢,但是還沒有執行其他的方法
    {
    IDictionary<String, String> parameters = this.NavigationContext.QueryString;
    if (parameters.ContainsKey("Red"))
    {
    byte R = Byte.Parse(parameters["Red"]);
    byte G = Byte.Parse(parameters["Green"]);
    byte B = Byte.Parse(parameters["Blue"]);
    this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255,R,G,B));
    }
    base.OnNavigatedTo(e);
    }
    運行程序,從MainPage導航到Page1,你會發現背景顏色是相同的。
    2、當回到源頁面時,如何返回數據?
    windows phone為我們提供了專門解決第一個問題的方案,但是還沒有解決第二個問題的現成方案。下面例子是一個折中的方案,可參考。
    上面MainPage.xaml.cs可改成
    namespace PhoneApp2
    {
    public partial class MainPage : PhoneApplicationPage{
    Random rand = new Random();
    public Color? ReturnedColor{set;get;}//這是一個可空的(nullable)Color對象,用來保存想要返回的數據(顏色)
    // 構造函數
    public MainPage()
    {
    InitializeComponent();
    }
    private void txt1_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
    String destination = "/Page1.xaml";
    this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));//導航至指定頁面
    e.Complete();
    e.Handled = true;
    }
    protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
    {//當觸摸到頁面裡textblock以外的部分時,contentpanel的背景會變成隨機顏色。
    this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)));//設置背景顏色
    base.OnManipulationStarted(e);
    }
    protected override void OnNavigateTo(NavigationEventArgs e)//當構造函數執行完畢且還沒有執行其他函數時(自動)調用
    {
    if(this.ReturnedColor != null)
    {
    this.ContentPanel.Background = new SolidColorBrush(this.ReturnedColor.Value);
    }
    base.OnNavigateTo(e);
    }

     

    }
    }

    Page1.xaml.cs可改成
    namespace PhoneApp2
    {
    public partial class Page1 : PhoneApplicationPage
    {
    Random rand = new Random();
    public Color? ReturnedColor{set;get;}//這是一個可空的(nullable)Color對象,用來保存想要返回的數據(顏色)
    // 構造函數
    public Page1()
    {
    InitializeComponent();
    }
    private void txt2_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
    this.NavigationService.Goback();//導航返回
    e.Complete();
    e.Handled = true;
    }
    protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
    {//當觸摸到頁面裡textblock以外的部分時,contentpanel的背景會變成隨機顏色。
    this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)));//設置背景顏色
    base.OnManipulationStarted(e);
    }
    protected override void OnNavigateFrom(NavigationEventArgs e)
    {
    if(this.ContentPanel.Background is SolidColorBrush)
    {
    Color clr = (this.ContentPanel.Background as SolidColorBrush).Color;
    if(e.Content is MainPage)
    (e.Content as MainPage).ReturnedColor = clr;//在導航出Page1頁面時設置返回值並保存到MainPage變量中
    }
    base.OnNavigateFrom(e);
    }
    }
    }
    -參數NavigationEventArgs類定義了兩個屬性:Uri類型的Uri和object類型的Content。
    -當MainPage使用參數"/Page1.xaml"來調用Navigate()函數時,MainPage中的OnNavigateFrom()方法被調用,調用時參數Uri屬性為"/Page1.xaml",Content屬性類型為Page1。這是一人新創建的Page1實例。隨後Page1調用的OnNavigateTo()也使用同樣的事件參數來標識值為"/Page1.xaml"的Uri對象以及值為Page1的Content對象。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved