windows phone頁面間傳遞資料

來源:互聯網
上載者:User

 頁面間傳遞資料包括兩個問題
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對象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.