向后导航在 Windows Phone 8.1 应用程序中不起作用
Backward navigation not working in Windows Phone 8.1 App
在我的 Windows Phone 8.1 应用程序中使用 MVVM 模式,我想进行页面导航。我已经为此编写了代码。前向页面导航工作正常!
但我面临的问题是,在页面上按下后退按钮时,应用程序正在退出。
我认为问题在于我在页面导航期间每次都创建了一个新的 _frame
对象,因此 _frame
对象没有保留导航历史记录。 _frame.CanGoBack
即使经过几轮导航后也给出 false
(应该是 true
)。
那么我在这里缺少什么?如何保存导航历史?我的方法有什么问题吗?我将不胜感激任何帮助。
代码如下:
导航服务Class:
public class NavigationService : INavigationService
{
private readonly Frame _frame;
public NavigationService()
{
_frame = new Frame();
}
public void NavigateTo(Type source)
{
Window.Current.Content = _frame;
_frame.Navigate(source);
}
public void GoBack(object sender, BackPressedEventArgs e)
{
Window.Current.Content = _frame;
if (_frame.CanGoBack)
{
_frame.GoBack();
e.Handled = true;
}
}
}
我的XAML后面的代码:
public INavigationService NavigationService;
public EmployeeProfilePage()
{
this.InitializeComponent();
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
...
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
NavigationService = new NavigationService();
NavigationService.GoBack(this, e);
}
创建Frame的新实例是错误的,只使用在App.xaml.cs
中创建的一个框架
只需将 _frame = Window.Current.Content 作为构造函数的框架,不要使用 new Frame()
您需要在当前帧上调用 GoBack
,可以使用 Page
对象的 Frame
属性 访问。您的应用程序也应该只有一个 Frame
,它在应用程序启动时实例化。
...
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
this.Frame.GoBack();
}
在我的 Windows Phone 8.1 应用程序中使用 MVVM 模式,我想进行页面导航。我已经为此编写了代码。前向页面导航工作正常!
但我面临的问题是,在页面上按下后退按钮时,应用程序正在退出。
我认为问题在于我在页面导航期间每次都创建了一个新的 _frame
对象,因此 _frame
对象没有保留导航历史记录。 _frame.CanGoBack
即使经过几轮导航后也给出 false
(应该是 true
)。
那么我在这里缺少什么?如何保存导航历史?我的方法有什么问题吗?我将不胜感激任何帮助。
代码如下:
导航服务Class:
public class NavigationService : INavigationService
{
private readonly Frame _frame;
public NavigationService()
{
_frame = new Frame();
}
public void NavigateTo(Type source)
{
Window.Current.Content = _frame;
_frame.Navigate(source);
}
public void GoBack(object sender, BackPressedEventArgs e)
{
Window.Current.Content = _frame;
if (_frame.CanGoBack)
{
_frame.GoBack();
e.Handled = true;
}
}
}
我的XAML后面的代码:
public INavigationService NavigationService;
public EmployeeProfilePage()
{
this.InitializeComponent();
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
...
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
NavigationService = new NavigationService();
NavigationService.GoBack(this, e);
}
创建Frame的新实例是错误的,只使用在App.xaml.cs
中创建的一个框架只需将 _frame = Window.Current.Content 作为构造函数的框架,不要使用 new Frame()
您需要在当前帧上调用 GoBack
,可以使用 Page
对象的 Frame
属性 访问。您的应用程序也应该只有一个 Frame
,它在应用程序启动时实例化。
...
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
this.Frame.GoBack();
}