每當我的程序通過墓碑關閉,當它被重新激活時,我希望應用程序導航回到開始屏幕。導航在應用程序激活Windows Phone 7(墓碑)
我願做這樣的事情
private void Application_Activated(object sender, ActivatedEventArgs e) { NavigationService.Navigate(new Uri("/Start.xaml", UriKind.Relative));
}
,但它不工作。謝謝,舒爾曼。
每當我的程序通過墓碑關閉,當它被重新激活時,我希望應用程序導航回到開始屏幕。導航在應用程序激活Windows Phone 7(墓碑)
我願做這樣的事情
private void Application_Activated(object sender, ActivatedEventArgs e) { NavigationService.Navigate(new Uri("/Start.xaml", UriKind.Relative));
}
,但它不工作。謝謝,舒爾曼。
這不是墓碑周圍普遍接受的行爲。期望的是,應用程序應該完全返回到用戶離開時的狀態。請記住,邏輯刪除可能是除了用戶在應用程序內發起的操作之外的其他結果。例如,作爲用戶,我不希望應用程序忘記我輸入的所有信息,並且僅僅因爲我接聽了電話而返回到前一個屏幕。
如果你真的想這樣做,它如何完成將取決於你的應用程序的結構和導航層次結構。
你最好打賭可能是建立你自己的導航系統。
如果您想使用內置後退堆棧。您的Application_Activated事件可以設置一個全局標誌,所有頁面將在其OnNavigatedTo事件中選取,然後通過向後導航進行響應。這種向後導航可能對用戶可見(如果只是簡要地)並且創建不太理想的體驗。
更新
它現在可以做這樣的事情使用Non-Linear Navigation Service。
我第二個馬特,這不是MSFT指南推薦的行爲。 WP7用戶會希望應用程序能正確地被墳墓扔石頭。
如果您仍然嚴格執行此操作,請使用NavigationService.GoBack()多次瀏覽。 從技術上講,WP7會保留您已經在系統中完成的所有頁面轉換,並且您可以編程回到主頁。您可能需要等待NavigationCompleted事件,然後調用下一個GoBack()並調用它,直到NavigationService.CanGoBack爲false,這將成爲您的主頁:)
正如@Matt Lacey所說,這幾乎是絕對的你不應該這樣做:你可能會落在市場certification guidelines也犯規:
5.2.3應用程序響應之後被停用
了Windows Phone應用程序 停用當用戶按下 開始按鈕或者如果設備超時 導致鎖定屏幕參與。 A 當Windows Phone應用程序調用Launcher 或Chooser API時,它也會被取消激活。激活後, 應用程序啓動時間必須符合第5.2.1節中的 要求。
微軟建議應用程序重新建立的 用戶 經歷的申請 停用之前的應用程序的狀態。有關更多信息,請參閱 Windows Phone主題的執行模型概述。
你在做什麼樣的應用?很難調用回到開始屏幕是否合適,而不瞭解更多信息或程序的上下文。
我們遇到了同樣的問題,轉換大型遺留項目,需要採取tomstoning一些自由。我們對這個平臺都比較陌生,所以請一定要聽取這些建議。我們的啓動頁面是SplashPage.xaml。我們使用UriMapper從上次電流源重定向:
private void Application_Activated(object sender, ActivatedEventArgs e) {
IsTombstoned = ! e.IsApplicationInstancePreserved;
if (IsTombstoned) {
//the os wants to return to the last page, but we want it to restart to our splash page
RootFrame.UriMapper = new RestartUriMapper();
}
}
這重定向到SplashPage.xaml,然後我們做其他的導航以清除操作系統想要去到最後一頁(可能是唯一的,我們的導航執行。)
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationContext.QueryString.ContainsKey("restart")) {
var app = Application.Current as App;
//a page redirect mapper was installed to get here from tombstone - reinstate the AssociationUriMapper now
app.RootFrame.UriMapper = App.Root.AssociationUriMapper;
//from tombstone, the last current nav source is still state, so force an initial navigation back to
//a new instance of this splash page and proceed start up from there
App.PageNavigation.Navigate(@"/Pages/SplashPage.xaml?fromtomb=true");
}
}
class RestartUriMapper : UriMapperBase {
Uri restartUri;
public RestartUriMapper() {
restartUri = new Uri(string.Format("/Pages/SplashPage.xaml?restart={0}", true.ToString()), UriKind.Relative);
}
public override Uri MapUri(Uri uri) {
if (restartUri != null) {
Uri nextPageUri = restartUri;
restartUri = null;
return nextPageUri;
}
return uri;
}
}
不要聽這些做誰引述guidlines 哈欠社會改良
試試這個
private void Application_Activated(object sender, ActivatedEventArgs e)
{
RootFrame.Navigated += RootFrame_Navigated;
}
void RootFrame_Navigated(object sender, NavigationEventArgs e)
{
RootFrame.Navigated -= RootFrame_Navigated;
RootFrame.Navigate(new Uri("/TestPage.xaml", UriKind.Relative));
}
作爲參考,許多應用程序(特別是遊戲)在市場上可用,在停用後不會重新建立狀態。這是一個建議,而不是一個規則。但是,是的,作爲一個用戶,當應用程序不保存狀態時,這是非常令人沮喪的。 – 2010-12-22 09:23:05