Windows Phone 可以支援5個墓碑化(Tombstoning)應用程式,第三方開發的應用程式隻能使用最後一個墓碑空間,最新的墓碑化應用程式會自動替換前一個程式。我們可以利用墓碑化功能暫時儲存應用程式目前狀态,如果使用者有意或無意觸碰了手機Home 按鍵,并再次點選Back 按鍵時應用程式會從墓碑化狀态激活并傳回最後應用程式狀态。
在開發墓碑化應用程式時,我們可以使用兩種資料存儲方式:應用程式狀态(Application State)、頁面狀态(Page State),這兩種方式最大的差別在于資料存儲和使用範圍不同,應用程式狀态通過PhoneApplicationService.State 屬性可存儲所有應用程式頁面的資料,并不局限于某一個頁面,不同的頁面可以通過PhoneApplicationService.State 來擷取相關的資料。頁面狀态使用PhoneApplicationPage.State 屬性針對的是單獨頁面的資料内容,當使用者點選Back 按鍵傳回時,系統将傳回使用者之前看到的頁面資訊。需要注意的是這些存儲都是暫時性的,如果應用程式需要永久的資料存儲,還應當使用獨立存儲(IsolatedStorage)方式,具體可參考《WP7 應用資料存儲IsolatedStorage 篇》。
下面我們來做一個簡單的執行個體應用,建立一個Windows Phone 項目,加入TextBox 控件。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel Orientation="Vertical">
<TextBlock Text="Input text here:"/>
<TextBox x:Name="testTextBox" Height="70"/>
</StackPanel>
</Grid>
在存儲頁面資料時我們需要使用OnNavigatedFrom 和OnNavigatedTo 方法,當使用者離開某頁面時将會啟動該頁面的OnNavigatedFrom 方法,當轉向某頁面時将執行該頁面的OnNavigatedTo 方法。在使用上述方法時需要增加System.Windows.Navigation 命名空間。
首先我們來編寫OnNavigatedFrom 方法的内容,當使用者離開MainPage 頁面後,将testTextBox 中填寫的内容儲存到textVal 鍵。此處使用的是PhoneApplicationPage.State 方式進行存儲。
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
State["textVal"] = testTextBox.Text;
base.OnNavigatedFrom(e);
}
接下來繼續編寫OnNavigatedTo 方法,當使用者點選Back 按鍵傳回MainPage頁面,将恢複之前testTextBox 填寫的内容。通過State.TryGetValue 方法即可獲得之前儲存到textVal 鍵中的值。
protected override void OnNavigatedTo(NavigationEventArgs e)
object textObj;
if (State.TryGetValue("textVal", out textObj))
{
testTextBox.Text = textObj.ToString();
}
base.OnNavigatedTo(e);
如果這個TextBox 的内容将用于整個應用程式,任何頁面都能夠通路到這個資料,則需要使用PhoneApplicationService.State 方法。在程式中增加Microsoft.Phone.Shell 命名空間,将程式稍微調整如下。
PhoneApplicationService service = PhoneApplicationService.Current;
service.State["textVal"] = testTextBox.Text;
if (service.State.TryGetValue("textVal", out textObj))
如果需要在非MainPage 頁面擷取textTextBox 内的值,可直接在該頁面增加OnNavigatedTo 方法讀取textVal 鍵值。通過以上兩種方式就能夠将應用程式目前狀态進行墓碑化操作,友善使用者恢複程式之前的狀态。
效果圖
錄入文字;點選Home 鍵轉到首頁:
點選Back 按鍵,系統将恢複之前輸入的文字:
相關資料
Running your app in the background (tombstoning)
How to: Preserve and Restore Page State for Windows Phone
本文轉自Gnie部落格園部落格,原文連結:http://www.cnblogs.com/gnielee/archive/2011/06/13/wp7-tombstoning.html,如需轉載請自行聯系原作者