Windows Phone 8.1页面导航

时间:2014-04-24 03:58:05

标签: c# xaml windows-phone windows-phone-8.1

我还是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));

3 个答案:

答案 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;
    }
}