如何在 windows phone 应用程序 8.1 中使用先前调用的 Web 服务数据导航回页面?
how to navigate back page with previously called web service data in windows phone app 8.1?
我有一个windowsphone8.1的基础应用,是空白应用;
我想导航到我的上一页而不调用我之前调用过的网络服务。
是否有任何堆栈或任何历史方法可以让我轻松管理上一页。
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
此代码不适用于我的框架。因为它向我发送了应用程序启动的第一页...
完整代码
当然----------------第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));
}
第 2 页设计......
<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));
}
请重播.........
新答案
您没有取消注册您的 BackPressed 事件,但您仍然在每次加载页面时添加它们,因此它会被执行多次。
正确注销您的活动。
在这种情况下,这样做的好地方是页面 Unloaded Event.
您还可以查看 NavigationHelper class theta 包含在 Visual Studio 模板中。
旧答案
每个页面都有一个 NavigationCacheMode 属性 并将其设置为启用(仅在构造函数中有效),您可以在导航离开时保留它的实例。
public MainPage() {
this.NavigationCacheMode = NavigationCacheMode.Required;
}
找到简短描述 in MSDN here。
警告:缓存和 navigation/activation/suspension 是一个复杂的主题,我建议阅读它。
我有一个windowsphone8.1的基础应用,是空白应用; 我想导航到我的上一页而不调用我之前调用过的网络服务。 是否有任何堆栈或任何历史方法可以让我轻松管理上一页。
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
此代码不适用于我的框架。因为它向我发送了应用程序启动的第一页...
完整代码
当然----------------第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));
}
请重播.........
新答案
您没有取消注册您的 BackPressed 事件,但您仍然在每次加载页面时添加它们,因此它会被执行多次。
正确注销您的活动。 在这种情况下,这样做的好地方是页面 Unloaded Event.
您还可以查看 NavigationHelper class theta 包含在 Visual Studio 模板中。
旧答案
每个页面都有一个 NavigationCacheMode 属性 并将其设置为启用(仅在构造函数中有效),您可以在导航离开时保留它的实例。
public MainPage() {
this.NavigationCacheMode = NavigationCacheMode.Required;
}
找到简短描述 in MSDN here。
警告:缓存和 navigation/activation/suspension 是一个复杂的主题,我建议阅读它。