我有一个Windows Phone 8.1的基本应用程序,这是一个空白的应用程序; 我想导航到我的上一页,而不调用我之前调用的Web服务。 是否有任何堆栈或任何历史记录方法,我可以轻松管理上一页。
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
此代码无法使用我的框架。因为它向我发送应用程序开始的第一页......
完整代码
当然---------------- Page 1设计
<Grid>
<Button Click="Button_Click" Content="Page 1" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<StackPanel Grid.Row="1"
>
<HyperlinkButton Content="Click to go to page 2" Click="HyperlinkButton_Click"/>
</StackPanel></Grid>
第1页代码
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(Page2));
}
<Grid>
<Button Click="Button_Click" Content="Page 2" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
第2页代码---------
public Page2()
{
this.InitializeComponent();
this.NavigationCacheMode=NavigationCacheMode.Enabled;
Windows.Phone.UI.Input.HardwareButtons.BackPressed += Page2HardwareButtons_BackPressed;
}
void Page2HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
e.Handled = true;
if (Frame.CanGoBack && Frame.SourcePageType.FullName == "Test.Page2")
{
Frame.GoBack();
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.NavigationMode != NavigationMode.Back)
{
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(Page3));
}
第3页设计-----
<Grid>
<Button Click="Button_Click" Content="Page 3" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
第3页代码------
public Page3()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Enabled;
Windows.Phone.UI.Input.HardwareButtons.BackPressed += Page3HardwareButtons_BackPressed;
}
void Page3HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
e.Handled = true;
if (Frame.CanGoBack && Frame.SourcePageType.FullName == "Test.Page3")
{
Frame.GoBack();
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(Page3));
}
请重播.........
答案 0 :(得分:2)
新答案
您不会注销BackPressed事件,但每次加载页面时仍会添加它们,因此会多次执行。
正确取消注册您的活动。 在这种情况下,这样做的好地方是页面 Unloaded Event。
您还可以查看Visual Studio模板中包含的 NavigationHelper 类。
旧回答
每个页面都有一个 NavigationCacheMode 属性,并且通过将其设置为启用(仅在构造函数中有效),您可以在导航时保留它的实例。
public MainPage() {
this.NavigationCacheMode = NavigationCacheMode.Required;
}
找到简短的解构in MSDN here。
警告:缓存和导航/激活/暂停是一个复杂的主题,我建议您阅读它。