在Windows Phone应用程序的导航堆栈中添加页面

本文关键字:添加 堆栈 导航 Windows Phone 应用程序 | 更新日期: 2023-09-27 18:02:45

嗨,我正在构建一个Windows Phone 8.1应用程序,它是用模板空白Windows Phone应用程序开始的。在应用程序中有两个页面1. 主页2. DetailPage

正常的用户流程是用户点击平铺-> MainPage -> DetailPage但是现在DetailPage可以被固定为次要标题,所以如果次要标题在App.xaml.cs onlaunching中被点击,我已经写了如下代码:

Frame rootFrame = Window.Current.Content as Frame;

        if (rootFrame == null)
        {
            //Init rot frame and default logic of Windows Phone
        }
        if (rootFrame.Content == null)
        {
            // if (e.Arguments has indicate app launched from tile)
                //launch DetailPage
            //else
                //Launch MainPage
        }
        else
        {
            // if (e.Arguments has indicate app launched from tile)
                //launch DetailPage
            //else
                //Launch MainPage
        }
        // Ensure the current window is active
        Window.Current.Activate();

我知道上面的代码很粗糙,我正在改进它。

所以现在如果用户点击DetailPage上的硬件返回按钮,它会回到MainPage。为此,我使用了以下代码块:

if (Frame.CanGoBack) 
{
    e.Handled = true;
    Frame.GoBack(); 
}

因此,如果用户直接结束在DetailPage通过点击二级平铺,然后点击硬件返回按钮,我希望它回到MainPage,但它是直接退出应用程序作为MainPage不存在于BackStack。我该如何做到这一点?

我试图使用

Frame.BackStack.Add

方法,但不知道如何使其正确工作。

在Windows Phone应用程序的导航堆栈中添加页面

不使用

Frame.GoBack();

直接导航到主页(也许清理BackStack)

Frame.Navigate(typeof(HomePage));
Frame.BackStack.Clear();

那么,把它放在你的上下文中,像这样的东西会起作用:

if (Frame.CanGoBack) 
{
    e.Handled = true;
    Frame.GoBack(); 
}
else
{
    // app was launched from a secondary tile
    e.Handled = true;
    Frame.Navigate(typeof(HomePage));
    Frame.BackStack.Clear();
}