Windows Phone 8.1 - 页面导航

37

作为一个来自于Windows Phone 8的用户,我从未想过在Windows Phone 8.1中会有很多变化。基本上我只是想知道如何像在Windows Phone 8中一样进行页面导航。要做到这一点,您需要添加:

NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));

但是那段代码无法在Windows Phone 8.1上运行。

请问有人能帮我解决这个问题吗?如果可能的话,请提供任何关于所有新的Windows Phone 8.1方法的链接或文档。


你有收到任何错误吗? - Rajeev Nair
这段代码在我的Nokia 630上使用Cyan系统可以正常工作。 - Juan Antonio Orozco
请参考这个答案,或许能帮到你... - Cabuxa.Mapache
NavigationService 给我报错了。 - Ishara Amarasekera
4个回答

63

在Windows Phone 8.1中,页面导航方法如下:

Frame.Navigate(typeof(SecondPage), param);

这意味着您将导航到“SecondPage”,并传递“param”(基于对象的类)。

如果您不需要传递任何参数,可以使用以下代码:

Frame.Navigate(typeof(SecondPage));

你可以在此 MSDN 链接找到文档。


如果我想返回,点击硬件返回按钮不起作用,那么我是否需要添加硬件返回按钮按下事件,然后进入我想要的页面?还是有更简单的方法? - Ahmed.C
6
你可以在你的SecondPage中使用NavigationHelper,这样你就不需要添加事件处理程序。例如,你可以创建一个BasicPage而不是BlankPage作为你的SecondPage,然后你就会看到它。 - Chris Shao
1
wp8.1与wp8.0不同,但更类似于winrt。 - Chris Shao
如何传递多个参数。 - Devi Prasad
@Devi Prasad,您应该定义一个包含多个参数的类。 - Chris Shao
这个方法在我的前向导航中起作用。我把它添加到了 xmal.cs 文件的点击事件中。 - Ishara Amarasekera

23

如果您想返回,可以使用:

if(this.Frame.CanGoBack)
{
this.Frame.GoBack();
}
如果您希望在单击返回按钮时返回上一页,需要覆盖硬件按钮事件:
HardwareButtons.BackPressed += HardwareButtons_BackPressed;

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;
            if(rootFrame != null && rootFrame.CanGoBack)
            {
                rootFrame.GoBack();
                e.Handled = true;
            }

        }

确保将 e.Handled 设为 true。


2
不要忘记你可以在应用程序级别执行此操作:https://dev59.com/N2Af5IYBdhLWcg3wu0tD - Cabuxa.Mapache

1
// Navigation Without parameters

this.Frame.Navigate(typeof(SecondPage));



// Navigation with parameters

this.Frame.Navigate(typeof(SecondPage),MyParameters);

如何传递多个参数 - Devi Prasad
使用数组或List<object>,将参数放入其中,并将数组或List<object>作为参数传递。需要示例吗? - Abdullah El-Menawy

0
发送多个参数: 虽然回答有点晚,但可能对某些人有帮助。您可以创建一个自定义类,在其中设置参数,并将其对象作为参数发送到目标页面。
例如,您的自定义类:
public class CustomDataClass
{
public string name;
public string email;
} 

CustomDataClass myData = new CustomDataClass();
myData.name = "abc";
myData.email = "abc@hotmail.com";

Frame.Navigate(typeof(SecondPage), myData);

然后在目标页面上,您可以像这样在OnNavigatedTo函数中检索:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
CustomDataClass myData2 = e.Parameter as CustomDataClass;
string name = myData2.name;
string email = myData2.email;
}

希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接