Я знаю, что в WP7 невозможно программно выйти из приложения. Так как я могу справиться со следующей необходимостью?
Моя главная страница пуста и имеет единственную цель сделать тест:
если пользователь никогда не заполнял страницу предпочтений, перенаправляет на страницу Page_B.xaml (страницу, на которой собраны его настройки, такие как язык и другая информация, необходимая для запуска приложения). В противном случае перенаправьте на Page_A.xaml.
Таким образом, первая страница, которую показывает пользователь, это Page_A или Page_B (в зависимости от того, запускает ли он приложение в первый раз).
ЗДЕСЬ ПРОБЛЕМА:
когда пользователь выбирает аппаратную кнопку «Назад», находясь в Page_A или Page_B, я хочу выйти из приложения. Вместо этого он перенаправляется на главную страницу, которая ничего не показывает.
Поэтому мне нужно выйти из приложения, когда пользователь выбирает «Назад» в Page_A или Page_B (OnBackKeyPress ()) или, в более общем случае, когда пользователь заходит в MainPage.xaml с помощью кнопки «Назад».
Есть ли способ выйти из приложения, не показывая пустой MainPage.xaml?
Спасибо за совет.
Emilio
вот упрощенный код в 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);
}