当用户单击 BackButton 时执行某些操作
Doing something when user click the BackButton
我想在用户单击 phone 上的硬件按钮时执行某些操作。我有两页。在 App.xaml.cs 中,我添加了以下代码来处理进出页面的导航。
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
if (this.Frame.CanGoBack)
this.Frame.GoBack();
}
但现在我想在用户单击后退按钮时执行其他操作。我该怎么做?
如果你的意思是 "doing something" 与 运行 返回之前的方法,你可以使用 Page
导航方法
OnNavigatingFrom
对于 "Invoked immediately before the Page is unloaded and is no longer the current source of a parent Frame."
OnNavigatinTo
对于 "Invoked when the Page is loaded and becomes the current source of a parent Frame."
OnNavigatedFrom
对于 "Invoked immediately after the Page is unloaded and is no longer the current source of a parent Frame."
例如
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string productID;
DataServiceContext svcContext =
new DataServiceContext(new Uri("AdventureWorks.svc", UriKind.Relative));
if (this.NavigationContext.QueryString.ContainsKey("ProductId"))
{
productID = this.NavigationContext.QueryString["ProductId"];
}
else
{
productID = App.Current.Resources["FeaturedProductID"].ToString();
}
svcContext.BeginExecute<Product>(new Uri("Product(" + productID + ")",
UriKind.Relative), loadProductCallback, svcContext);
}
如果您希望后退按钮在每个页面上执行不同的操作,那么您将需要处理每个页面上的后退按钮 - 我这样做是为了提示用户确认丢失他们在我的一个页面上所做的更改。
在每个页面的 OnNavigatedTo 方法中订阅 BackRequested 事件:
protected override void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().BackRequested += this.OnBackPressed;
base.OnNavigatedTo(e);
}
并确保您在页面的 OnNavigatedFrom 方法中取消订阅:
protected override void OnNavigatingFrom(Windows.UI.Xaml.Navigation.NavigatingCancelEventArgs e)
{
SystemNavigationManager.GetForCurrentView().BackRequested -= this.OnBackPressed;
base.OnNavigatingFrom(e);
}
现在您可以在每个页面上编写一个 OnBackPressed() 事件处理程序来执行您希望它在该页面上执行的操作。
我想在用户单击 phone 上的硬件按钮时执行某些操作。我有两页。在 App.xaml.cs 中,我添加了以下代码来处理进出页面的导航。
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
if (this.Frame.CanGoBack)
this.Frame.GoBack();
}
但现在我想在用户单击后退按钮时执行其他操作。我该怎么做?
如果你的意思是 "doing something" 与 运行 返回之前的方法,你可以使用 Page
导航方法
OnNavigatingFrom
对于 "Invoked immediately before the Page is unloaded and is no longer the current source of a parent Frame."
OnNavigatinTo
对于 "Invoked when the Page is loaded and becomes the current source of a parent Frame."
OnNavigatedFrom
对于 "Invoked immediately after the Page is unloaded and is no longer the current source of a parent Frame."
例如
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string productID;
DataServiceContext svcContext =
new DataServiceContext(new Uri("AdventureWorks.svc", UriKind.Relative));
if (this.NavigationContext.QueryString.ContainsKey("ProductId"))
{
productID = this.NavigationContext.QueryString["ProductId"];
}
else
{
productID = App.Current.Resources["FeaturedProductID"].ToString();
}
svcContext.BeginExecute<Product>(new Uri("Product(" + productID + ")",
UriKind.Relative), loadProductCallback, svcContext);
}
如果您希望后退按钮在每个页面上执行不同的操作,那么您将需要处理每个页面上的后退按钮 - 我这样做是为了提示用户确认丢失他们在我的一个页面上所做的更改。
在每个页面的 OnNavigatedTo 方法中订阅 BackRequested 事件:
protected override void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().BackRequested += this.OnBackPressed;
base.OnNavigatedTo(e);
}
并确保您在页面的 OnNavigatedFrom 方法中取消订阅:
protected override void OnNavigatingFrom(Windows.UI.Xaml.Navigation.NavigatingCancelEventArgs e)
{
SystemNavigationManager.GetForCurrentView().BackRequested -= this.OnBackPressed;
base.OnNavigatingFrom(e);
}
现在您可以在每个页面上编写一个 OnBackPressed() 事件处理程序来执行您希望它在该页面上执行的操作。