ページ スタックから複数のページ (「タスク」) を削除するために、このメソッドを作成しました。
/// <summary>
/// Decreases the back stack entry count, leaving the amount of items on the stack equilivent to the <param name="leaveAmount">leaveAmount</param>.
/// </summary>
/// <exception cref="NotSupportedException">A value less than 0 is provided</exception>
/// <param name="leaveAmount">The leave amount.</param>
/// <param name="whenFinished"> </param>
public static void DecreaseBackStackEntryCount(int leaveAmount, Action whenFinished = null)
{
if (leaveAmount < 0)
{
throw new NotSupportedException("cannot remove every item on stack");
}
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
try
{
while (((PhoneApplicationFrame)Application.Current.RootVisual).BackStack.Count() > leaveAmount)
{
try
{
((PhoneApplicationFrame) Application.Current.RootVisual).RemoveBackEntry();
}
catch (InvalidOperationException)
{
return;
}
}
}
catch
{
}
finally
{
if (whenFinished != null)
{
whenFinished.Invoke();
}
}
});
}
5ページで、次のように使用します:(サインアウト後にメインメニューに戻ろうとしていると思います..そうでない場合は、メソッドの署名を読んでください)
DecreaseBackstackEntryCount(1,() => NavigationService.GoBack());