Windows Phone開發之路(16) 如何在頁面間傳遞資料

來源:互聯網
上載者:User

  這一篇文章要解決的問題是如何從源頁面傳遞資料到目標頁面。其實Windows Phone已經為我們提供了一套解決方案,那就是查詢字串。

  下面這個項目要實現的效果是:當從MainPage頁面導航到SecondPage時,該項目為SecondPage提供了MainPage當前的背景色,而且SecondPage也把自己初始化成這種顏色。這裡傳遞的資料是背景顏色值。

  MainPage.xaml XAML代碼:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="Navigate to Second Page!"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Padding="0,34"
ManipulationStarted="TextBlock_ManipulationStarted"/>
</Grid>

  MainPage.xaml C#代碼:

namespace SilverlightPassData
{
public partial class MainPage : PhoneApplicationPage
{
Random rand = new Random();

// 建構函式
public MainPage()
{
InitializeComponent();
}

private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs e)//處理Manipulation事件
{
//todo:導航到Second Page頁面,並且傳遞頁面背景顏色資訊給Second Page.
string destination = "/SecondPage.xaml";//建立一個String變數儲存目標頁面地址

if (this.ContentPanel.Background is SolidColorBrush)//檢查能否成功轉換成SolidColorBrush類型。Background屬性為Brush類型
{
Color clr = (this.ContentPanel.Background as SolidColorBrush).Color;//將Background屬性值轉換成SolidColorBrush類型並擷取顏色值
destination += string.Format("?Red={0}&Green={1}&Blue={2}",clr.R,clr.G,clr.B);//將顏色值作為參數附在目標地址後,類似於HTML查詢字串格式
}

this.NavigationService.Navigate(new Uri(destination,UriKind.Relative));//導航到目標地址

e.Complete();//表示不再處理其它Manipulation事件
e.Handled = true;//將路由事件標記為已處理
}

protected override void OnManipulationStarted(ManipulationStartedEventArgs e)//重寫基類Control的虛方法
{
//todo:實現當單擊螢幕的時候隨機改變頁面背景色
this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255,(byte)rand.Next(256),(byte)rand.Next(256),(byte)rand.Next(256)));

base.OnManipulationStarted(e);//基類訪問運算式調用基類方法
}
}
}

  

  SecondPage.xaml XAML代碼:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="Go back to Main Page!"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Padding="0,34"
ManipulationStarted="TextBlock_ManipulationStarted"/>
</Grid>

  SecondPage.xaml C#代碼:

namespace SilverlightPassData
{
public partial class SecondPage : PhoneApplicationPage
{
public SecondPage()
{
InitializeComponent();
}

private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs e)//處理Manipulation事件
{
//todo:返回或導航到MainPage頁面
this.NavigationService.GoBack();

e.Complete();
e.Handled = true;
}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//重寫基類Page的虛方法,當頁面變為架構的活動頁面時調用
{
//todo:擷取從MainPage傳遞過來的資料,並以此來初始化頁面背景顏色
IDictionary<string, string> parameters = this.NavigationContext.QueryString;//建立泛型介面字典來接受返回結果對象

if (parameters.ContainsKey("Red"))//調用ContainsKey()方法判斷結果對象中是否包含Red的鍵
{
//todo:分別擷取每個鍵的值並轉換為byte類型
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);//調用基類虛方法
}
}
}

  效果

           

  下一篇將要總結的是關於如何在頁面間資料共用。

相關文章

聯繫我們

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