Иван Трещев – Программирование для мобильных платформ. Android и WP. Учебный курс (страница 10)
Удивительно, мы не написали еще ни одной строчки кода на C#, но тем не менее, приложение уже работает. Убедитесь сами. Запустите приложение и попробуйте нажимать на ссылки. Вы будете переходить на первую, вторую или третью страницу в зависимости от выбранной ссылки. Обратите внимание, что для возврата на основную страницу вы можете использовать аппаратную кнопку Back. При этом, если вы находитесь на главной странице и нажмете на кнопку Back, то тем самым вы закроете приложение.
Мы осуществили навигацию при помощи XAML-кода. Такого же результата можно добиться и через код на C#. Для этого добавим в проект три новых элемента Button (кнопка). Чтобы не писать одинаковый код для каждой кнопки, создадим общий обработчик событий для них. Для этого нам нужно знать имена кнопок.
[XAML]
<Button Content=«Рыжик» Height=«72» HorizontalAlignment=«Left» Margin=«12,40,0,0»
Name=«button1» VerticalAlignment=«Top» Width=«160»
Click=«Button_Click» />
<Button Content=«Барсик» Height=«72» HorizontalAlignment=«Left» Margin=«12,120,0,0»
Name=«button2» VerticalAlignment=«Top» Width=«160»
Click=«Button_Click» />
<Button Content=«Васька» Height=«72» HorizontalAlignment=«Left» Margin=«12,200,0,0»
Name=«button3» VerticalAlignment=«Top» Width=«160»
Click=«Button_Click» />
[C#]
private void Button_Click (object sender, RoutedEventArgs e)
{
Button clickedbutton = sender as Button;
switch (clickedbutton.Name)
{
case «button1»: NavigationService.Navigate (new Uri (»/page1.xaml», UriKind.Relative));
break;
case «button2»:
NavigationService.Navigate (new Uri (»/page2.xaml», UriKind.Relative));
break;
case «button3»:
NavigationService.Navigate (new Uri (»/page3.xaml», UriKind.Relative));
break;
}
}
Снова запустите проект и убедитесь, что навигация при помощи кнопок работает так же, как и в примере с гиперссылками.
Рисунок 2.17 Вид программы в окне эмулятора
Для перехода назад вы можете использовать метод NavigationService. GoBack, который возвращает к экземпляру предыдущей страницы. Конечно, это дублирует функциональность кнопки «Назад», так что вы, скорее всего, будете вызывать этот метод как часть какой-либо другой функциональности.
private void button1_Click (object sender, RoutedEventArgs e)
{
NavigationService. GoBack ();
}
Иногда требуется не просто перейти на другую страницу, но и передать ей некоторые данные с предыдущей страницы. Добавьте на первую страницу текстовое поле и кнопку под именем passParam.
Добавьте код для обработчика щелчка кнопки
private void passParam_Click (object sender, RoutedEventArgs e)
{
NavigationService.Navigate (new Uri (»/SecondPage. xaml? msg=" + textBox1.Text, UriKind.Relative));
}
Вы видите, что при навигации на вторую страницу мы передаем строковые данные, которые берутся из текстового поля. Чтобы получить передаваемые данные, добавьте на второй странице текстовый блок (TextBlock) под именем textBlock1. В файле SecondPage. xaml. cs создайте следующий метод:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base. OnNavigatedTo (e);
string msg = «»;
if (NavigationContext.QueryString.TryGetValue («msg», out msg)) textBlock1.Text = msg;
}
Запустите приложение, введите текст на первой странице и убедитесь, что он отображается на второй странице.
Одним из требований к устройствам под управлением Windows Phone 7 является наличие аппаратной кнопки Back (Назад). По умолчанию кнопка Back работает как в обычном браузере. Она автоматически запоминает посещаемые страницы приложения, а также закрывает само приложение, если приложение состоит из одной страницы или пользователь вернулся к основной странице из других страниц и больше некуда возвращаться.
Переопределяем работу кнопки Back
Если вас не устраивает логика работы кнопки Back по умолчанию, то вы можете переопределить ее работу в нужном вам направлении. Делается это очень просто.
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
// Ваш код здесь
e.Cancel = true; //Cancels the default behavior.
}
Давайте попробуем посмотреть работу переопределенной кнопки на примере. Возьмем предыдущий проект с навигацией по страницам PageNavigation и откроем редактор кода для страницы Page3.xaml. cs. Напишем следующий код:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
// Ваш код здесь
NavigationService.Navigate (new Uri (»/page1.xaml», UriKind.Relative));