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

windows phone頁面間數據共享

編輯:更多關於編程

     可以通過靜態屬性Application.Current可以返回當前程序的Application對象,然後可以簡
    單地將其轉換成App類型。這意味著可以使用App類來存儲用於程序中多個頁面共享的數據。
    下面例子演示如何利用App類實現頁面間數據共享:
    在Silverlight項目的App類定義一個簡單的公共屬性:
    public partial class App : Application
    {
    //用於在頁面間共享數據的公共屬性
    public Color? SharedColor { set; get; }//這個屬性定義為可空的(nullable)Color
    對象,而不僅僅是一般的Color對象
    ...
    }
    源頁面MainPage如下所示:
    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)
    {
    (Application.Current as App).SharedColor = (this.ContentPanel.Background as SolidColorBrush).Color;//在導航到Page1頁面之前首先將Color對象保存到App類的屬性中
    }
    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 OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//該函數被調用時,頁面的構造函數已經執行完畢,但還沒有執行其他的方法
    {
    Color? sharedColor = (Application.Current as App).SharedColor;//訪問公共屬性
    if (sharedColor != null)
    {
    this.ContentPanel.Background = new SolidColorBrush(sharedColor.Value);
    }
    base.OnNavigatedTo(e);
    }
    }
    }
    目標頁面Page1如下所示:
    Page1.xaml中包含TextBlock:
    <TextBlock HorizontalAlignment="Left" Margin="157,212,0,0" Name="txt2" Text="go back to 1st page" VerticalAlignment="Top" ManipulationStarted="txt2_ManipulationStarted" />Page1.xaml.cs代碼如下所示:
    namespace PhoneApp2
    {
    public partial class Page1 : PhoneApplicationPage
    {
    Random rand = new Random();
    public Page1()
    {
    InitializeComponent();
    }
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//該函數被調用時,頁面的構造函數已經執行完畢,但還沒有執行其他的方法
    {
    Color? shareColor = (Application.Current as App).SharedColor;//訪問公共屬性
    if (shareColor != null)
    {
    this.ContentPanel.Background = new SolidColorBrush(shareColor.Value);
    }
    base.OnNavigatedTo(e);
    }
    private void txt2_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
    if (this.ContentPanel.Background is SolidColorBrush)
    {
    (Application.Current as App).SharedColor = (this.ContentPanel.Background as SolidColorBrush).Color;//在返回到MainPage頁面之前將當前Color對象保存到App類的屬性中
    }
    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);
    }
    }
    }
    運行程序你就會發現在頁面之間進行導航時,頁面總是共享相同的顏色。
    其實你在App類所定義的屬性在這裡相當於一個全局變量,整個應用程序皆可訪問。

    你可以通過靜態屬性PhoneApplicationService.Current來獲取現有PhoneApplicationService的實例,如下所示:
    PhoneApplicationService appService = PhoneApplicationService.Current;
    PhoneApplicationService類定義在命名空間Microsoft.Phone.Shell中,它的實例在標准的App.xaml文件中創建:
    <Application.ApplicationLifetimeObjects>
    <!--處理應用程序的生存期事件所需的對象-->
    <shell:PhoneApplicationService
    Launching="Application_Launching" Closing="Application_Closing"
    Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>
    PhoneApplicationService包含一個State屬性(類型為IDictionary<String,object>)可用於保存和恢復數據。但該State字典只適用於存儲程序同一次運行過程中的臨時數據。如果需要在程序多次執行過程之間保存數據,建議使用獨立存儲。訪問State屬性內容類似下面所示:
    Color clr = (Color)appService.State["Color"];
    appService.State["Color"] = clr;

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