私はここで同じ問題を抱えています:
私は C# や WP の専門家ではないので、ご容赦ください。
- 「/MainPage.xaml?id=XX」にリンクするセカンダリ タイルがあります。
- アプリの高速再開を有効にしています。(アプリ マニフェストの ActivationPolicy="Resume")
- アプリには MainPage.xaml という 1 つのページしかありません。
問題: セカンダリ タイル ("/MainPage.xaml?id=XX") を使用してアプリを再開すると、以前のインスタンス (再開されたはず) の簡単なビューが表示され、MainPage が再び初期化され、新しいインスタンスが作成されます。 . 実際には、アプリは、以前に開いていたものをのぞき見した後、最初から読み込まれています。
これは明らかに望ましくない動作です。既存のインスタンスを使用してタスクを実行したいと考えています。
試行 1 :e.Cancel = true;
MainPage.xaml へのナビゲーションをキャンセルするために使用します(公式の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 を使用する/置き換える方法がわかりません... またはそれは私が望んでいるものです/それ以上の問題/複雑さを引き起こさないでしょう.
この問題の解決策がわからず、完全に間違った方向に進んでいる可能性があります。可能であれば、コード例を使用してすべての提案を簡単な言葉にしてください。私はまだ学んでいます。
助けてくれてありがとう。