我在这里遇到了同样的问题:
我不是 C# 或 WP 专家,所以请多多包涵。
- 我有链接到“/MainPage.xaml?id=XX”的辅助磁贴。
- 我启用了快速应用恢复。(应用清单中的 ActivationPolicy="Resume")
- 我的应用程序中只有一页:MainPage.xaml。
问题:当我使用辅助磁贴(“/MainPage.xaml?id=XX”)恢复应用程序时,我会简要了解前一个实例(本来可以恢复),然后 MainPage 再次初始化,创建一个新实例. 实际上,在让我查看了之前打开的内容之后,该应用程序正在从头开始加载。
这显然是不受欢迎的行为。我想使用现有实例来执行我的任务。
尝试1:e.Cancel = true;
用于取消导航到MainPage.xaml:(
使用官方提供的App.xaml.cs代码Fast App Resume 示例中的 App.xaml.cs 代码来识别应用程序的启动方式)
...
else if (e.NavigationMode == NavigationMode.New && wasRelaunched)
{
// This block will run if the previous navigation was a relaunch
wasRelaunched = false;
if (e.Uri.ToString().Contains("="))
{
// This block will run if the launch Uri contains "=" (ex: "id=XX") which
// was specified when the secondary tile was created in MainPage.xaml.cs
sessionType = SessionType.DeepLink;
e.Cancel = true; // <======================== Here
// The app was relaunched via a Deep Link.
// The page stack will be cleared.
}
}
...
问题:这样做时,我的 OnNavigatedTo 事件处理程序永远不会触发,因此我的查询字符串永远不会被解析。
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
String navId;
if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back)
{
if (NavigationContext.QueryString.TryGetValue("id", out navId))
{
MessageBox.Show(navId.ToString()); // Not reached
}
}
...
尝试 2:e.Cancel = true;
用于取消到 MainPage.xaml 的导航,并将Uri 传递给 MainPage 中的方法:
// App.xaml.cs
...
else if (e.NavigationMode == NavigationMode.New && wasRelaunched)
{
// This block will run if the previous navigation was a relaunch
wasRelaunched = false;
if (e.Uri.ToString().Contains("="))
{
// This block will run if the launch Uri contains "=" (ex: "id=XX") which
// was specified when the secondary tile was created in MainPage.xaml.cs
sessionType = SessionType.DeepLink;
e.Cancel = true;
MainPage.GoToDeepLink(e.Uri); // <======================== Here
// The app was relaunched via a Deep Link.
// The page stack will be cleared.
}
}
...
// MainPage.xaml.cs
public static void GoToDeepLink(Uri uri) // <======================== Here
{
// Convert the uri into a list and navigate to it.
string path = uri.ToString();
string id = path.Substring(path.LastIndexOf('=') + 1);
MyList list = App.ViewModel.ListFromId(Convert.ToInt32(id));
pivotLists.SelectedItem = list;
}
问题:我收到一个pivotLists错误是非静态的,因此需要对象引用。我认为为了让它工作,我需要创建一个 MainPage ( MainPage newMainPage = new MainPage();
) 的新实例并调用newMainPage.pivotLists.SelectedItem = list;
- 但我不知道如何使用 newMainPage 而不是现有的/替换它......或者如果这是我想要的/不会导致进一步的问题/并发症。
我不知道这个问题的解决方案是什么,我可能会朝着完全错误的方向前进。如果可以的话,请将所有建议与代码示例保持简单,我仍在学习。
谢谢你的帮助。