如何管理应用状态
本文关键字:应用 状态 管理 何管理 | 更新日期: 2023-09-27 18:30:57
假设我以这种方式设计了页面导航:
P(1) -> 转到 P(2) -> 转到 P(3) 并在 P(3) 处,用户单击主页按钮(Microsoft按钮)
a) 当应用程序重新启动时,我如何返回p(3)?
谢谢
---更新
我需要在这个事件上做什么?
受保护的覆盖无效 OnLaunched(LaunchActivated EventArgs args) { Frame rootFrame = Window.Current.Content as Frame; 当窗口已有内容时,不要重复应用程序初始化, 只需确保窗口处于活动状态即可 if (rootFrame == null) { 创建一个框架以充当导航上下文并导航到第一页 rootFrame = new Frame(); 如果(参数。上一页执行状态 == 应用程序执行状态。终止) { TODO:从先前挂起的应用程序加载状态 } 将框架放在当前窗口中 Window.Current.Content = rootFrame; } if (rootFrame.Content == null) { 当导航堆栈未还原时,导航到第一页, 通过将所需信息作为导航传递来配置新页面 参数 if (!rootFrame.Navigate(typeof(MainPage), args.参数)) { 抛出新的异常("无法创建初始页面"); } } 确保当前窗口处于活动状态 Window.Current.Activate(); }
您可以使用本地设置来存储每个页面的事件中打开OnNavigatedTo
的最后一页。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ApplicationData.Current.LocalSettings.Values["LastPage"] = this.GetType().ToString();
}
在 App.xaml.cs 事件之后OnLaunched(..)
检查哪个页面是最后一页。据此,您可以导航它。
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
if (ApplicationData.Current.LocalSettings.Values["LastPage"] != null)
{
Type t = Type.GetType((string)ApplicationData.Current.LocalSettings.Values["LastPage"]);
if (!rootFrame.Navigate(t, args.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
else
{
if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
}
// Ensure the current window is active
Window.Current.Activate();
}