Я знаю, что в WP7 невозможно выйти из приложения программно. Так как я могу справиться со следующей потребностью? Моя страница MainPage пуста, и ее единственная цель - провести тест: если пользователь никогда не заполнял страницу предпочтений, перенаправляется на Page_B.xaml (страницу, которая собирает его предпочтения, например язык и другую информацию, необходимую для запуска приложения). В противном случае перенаправьте на Page_A.xaml. Итак, первая страница, которая отображается пользователю, - это либо Page_A, либо Page_B (в зависимости от того, запускает ли он приложение в первый раз).
ВОТ ПРОБЛЕМА: когда пользователь нажимает аппаратную кнопку «Назад» на странице Page_A или Page_B, я хочу выйти из приложения. Вместо этого он перенаправляется на главную страницу, которая ничего не показывает. Поэтому мне нужно выйти из приложения, когда пользователь выбирает «Назад» в Page_A или Page_B (OnBackKeyPress ()), или, в более общем смысле, когда пользователь переходит к MainPage.xaml с помощью кнопки «Назад». Есть ли способ выйти из приложения, не показывая пустой MainPage.xaml? Спасибо за ваш совет. Эмилио
вот упрощенный код в MainPage.xaml:
public MainPage(){
InitializeComponent();
if (phoneAppService.State.TryGetValue("currentLanguage", out someObject))
{ // Yes: go on
var uri = "/Pages/Page_A.xaml";
this.Dispatcher.BeginInvoke(() => this.NavigationService.Navigate(new Uri(uri, UriKind.Relative)));
}
else
{ // No: select language before proceeding
var uri = "/Pages/Page_B.xaml";
this.Dispatcher.BeginInvoke( () => this.NavigationService.Navigate(new Uri(uri, UriKind.Relative)));
}
}
**// if previous page was Page_A or Page_B then exit application**
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
string sourcePage = "";
if (NavigationContext.QueryString.TryGetValue("from", out sourcePage)) {
if ((string.Compare(sourcePage.ToString(), "Page_A")) == 0 ? true : false) {
**// EXIT APPLICATION**
}
if ((string.Compare(sourcePage.ToString(), "Page_B")) == 0 ? true : false) {
**// EXIT APPLICATION**
}
}
base.OnNavigatedTo(e);
}
Page_A.xaml имеет следующий код для отправки информации на MainPage.
// Back Button pressed: notify MainPage so it can exit application
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
NavigationService.Navigate(new Uri(uri, UriKind.Relative));
base.OnBackKeyPress(e);
}
Page_B.xaml имеет следующий код для отправки информации на MainPage.
// Back Button pressed: notify MainPage so it can exit application
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
var uri = "/MainPage.xaml?from=Page_B";
NavigationService.Navigate(new Uri(uri, UriKind.Relative));
base.OnBackKeyPress(e);
}