我还是Windows Phone开发的新手。所以现在我要开发Windwos Phone 8.1。我真的不知道页面导航的问题是什么。我写了这样的代码
private void hbGo_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(SecondPage));
}
但它显示错误(此页面不包含“Frame”的定义,并且没有扩展方法“Frame”接受第一个参数) 即使我像底部的代码也一样......
Frame.Navigate(typeof(SecondPage));
答案 0 :(得分:22)
导航取决于项目的类型:
如果 Windows Phone 8.1 Silverlight ,则应使用NavigationService.Navigate() method:
适用于:Windows Phone 8和Windows Phone Silverlight 8.1 | Windows Phone OS 7.1
如果您定位 Windows Phone RunTime ,则应使用Frame.Navigate method():
支持的最低手机Windows Phone 8.1 [仅限Windows运行时应用]
答案 1 :(得分:3)
Frame不是Page的一部分。 我按照以下方式进行导航
NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
您只需传递要导航到的xaml页面的名称。
答案 2 :(得分:2)
我使用我创建的这个小型导航服务类,允许我从Windows Phone 8.1应用程序的ViewModel中导航不同的页面。仅供参考,INavigate是Windows.UI.Xaml.Controls。
的一部分public class NavigationService : INavigate
{
private Frame Frame { get { return (Frame)Window.Current.Content; } }
public bool Navigate(Type sourcePageType)
{
return Frame.Navigate(sourcePageType);
}
public void Navigate(Type sourcePageType, object parameter)
{
Frame.Navigate(sourcePageType, parameter);
}
public void ClearStack()
{
((Frame)Window.Current.Content).BackStack.Clear();
}
/// <summary>
/// Virtual method used by the <see cref="GoBackCommand"/> property
/// to invoke the <see cref="Windows.UI.Xaml.Controls.Frame.GoBack"/> method.
/// </summary>
public virtual void GoBack()
{
if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();
}
/// <summary>
/// Virtual method used by the <see cref="GoBackCommand"/> property
/// to determine if the <see cref="Frame"/> can go back.
/// </summary>
/// <returns>
/// true if the <see cref="Frame"/> has at least one entry
/// in the back navigation history.
/// </returns>
public virtual bool CanGoBack()
{
return this.Frame != null && this.Frame.CanGoBack;
}
}