C#, Windows Phone 7, использование оператора if-else для проверки отображаемой страницы

Сейчас я разрабатываю приложение для Windows Phone 7, в моем приложении есть три кнопки, расположенные на панели приложений. Вот обработчик событий для этих трех кнопок:

    //app bar page navigation
    private void ApplicationBarIconButton_Click1(object sender, EventArgs e)
    {
        if(//check if the current displayed page is mainpage)
        {
            //do nothing
        }
        else
        {
            NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
        }
    }

    private void ApplicationBarIconButton_Click2(object sender, EventArgs e)
    {
        NavigationService.Navigate(new Uri("/Audios.xaml", UriKind.RelativeOrAbsolute));
    }

    private void ApplicationBarIconButton_Click3(object sender, EventArgs e)
    {
        NavigationService.Navigate(new Uri("/Statistics.xaml", UriKind.RelativeOrAbsolute));
    }

Кнопочная навигация работает хорошо, за исключением первой (Button_Click1), потому что, когда я впервые захожу на главную страницу и нажимаю первую кнопку, приложение автоматически возвращается к списку приложений.

Итак, я хочу использовать оператор if-else, чтобы проверить, какая страница отображается в данный момент, а затем решить, следует ли перемещаться или оставаться на текущей странице.


person Jason Chong    schedule 27.03.2011    source источник


Ответы (2)


Кнопка click1 должна быть удалена с главной страницы. Нет смысла держать эту кнопку там.

Другие страницы должны использовать кнопку «Назад», чтобы вернуться на главную страницу. В противном случае вы испортите свой задний стек.

person Steve Chadbourne    schedule 27.03.2011
comment
испортить задний стек? Вы имеете в виду полностью удалить панель приложений? - person Jason Chong; 27.03.2011
comment
У вас должна быть одна панель приложения на странице, настроенная для этой страницы. Чего следует избегать, так это того, чтобы страница 1 переходила на страницу 2, а затем кнопка на странице 2 ссылалась на страницу 1. В бэкстеке (например, в истории браузера) теперь есть p1, p2, p1. Назад с первой страницы должно выйти из приложения, но если вы нажмете кнопку «Назад», оно перейдет на p2. Решение состоит в том, чтобы позволить пользователю использовать кнопку «Назад», чтобы вернуться с p2 на p1. - person Steve Chadbourne; 27.03.2011
comment
одна панель приложения на страницу, настроенная для страницы, спасибо за советы, я настроил свою панель приложения для каждой страницы :) - person Jason Chong; 29.03.2011

Похоже, вы используете ApplicationBar, как если бы вы использовали TabBar в iPhone (или аналогичный в Android, Bada и т. д.)

В WP7 стиль Metro обычно использует Pivot или Panorama, а не «Панель вкладок» для этого типа навигации.

Если вы хотите использовать ApplicationBar следующим образом:

  • тогда вы можете (рынок WP7 позволит это), но пользователи могут подумать, что это не совсем Metro.
  • тогда вы можете захотеть отключить соответствующую кнопку, а не просто отключить действие.
  • то вы можете обнаружить текущую отображаемую страницу, используя CurrentSource в NavigationService

Кроме того, обратите внимание, что если вы попытаетесь перейти с MainPage.xaml на тот же URL-адрес MainPage.xaml, вы увидите исключение — насколько я помню, служба навигации жалуется на то, что фрагменты URL-адресов не поддерживаются.

person Stuart    schedule 27.03.2011