Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Навигация

0

Прежде  чем  говорить о  навигации, давайте посмотрим,  как   приложение в  Windows 8 способно отобразить контент. Речь идет  именно о контенте, так как разработка приложений в  стиле Metro базируется на отсутствии оболочки у окна. Тем не менее, окно в приложении присутствует, оно создается неявно, но на него можно получить ссылку, используя свойство Current класса Window. Получив ссылку на окно приложения, разработчик может установить свойство Content, которое будет определять содержимое окна. Когда же  содержимое полностью сформировано, его можно отобразить с помощью метода Activate. Иными словами, если в  Вашем приложении  предусмотрен переход на другие страницы, то этого можно достичь,  установив  свойство Content в  ссылку на страницу и вызвав Activate. В сентябрьской версии Windows 8 (Platform Preview) нечто подобное было реализовано. Проблема лишь в том, что данный механизм не позволяет сохранять историю переходов, не поддерживает хорошего способа передачи параметров и  т.д. Поэтому для организации навигации  правильно использовать специальный  контейнер   Frame,   который   предназначен  для поддержки контекста навигации.

Заглянем внутрь файла App.xaml.cs. Тут есть следующие строчки:

protected override void OnLaunched(LaunchActivatedEventArgs args)

{

var rootFrame = new Frame(); rootFrame.Navigate(typeof(BlankPage));

Window.Current.Content = rootFrame; Window.Current.Activate();

}

Как видите, при запуске приложения создается объект типа Frame,  который устанавливается  в   свойство  Content.  С  помощью  метода  Navigate  объект типа Frame загружает страницу BlankPage (имя страницы по умолчанию), что позволяет отобразить ее после вызова  метода окна Activate. Таким образом, Frame является тем классом, который обеспечивает контекст навигации, и дает доступ к ряду методов и свойств, связанных  с навигацией:

·                   CacheSize — указывает количество страниц, сохраняемых в  кэше  при

«глубокой» навигации;

·                   CanGoBack  —  определяет,  возможно ли  осуществить  навигацию на предыдущую страницу (была ли и есть ли страница в кэше);

·                   CanGoForward  —  определяет,  можно  ли  совершить   навигацию на страницу, которую пользователь уже посещал и  с  которой вернулся на предыдущую;

·                   GoBack — выполняет навигацию на предыдущую страницу;

·                   GoForward — выполняет навигацию на следующую страницу;

·                   Navigated — событие, генерируемое после успешной навигации;

·                   Navigating — событие, которое генерируется перед попыткой навигации;

·                   NavigationFailed — событие, которое возникает, если во время навигации произошла ошибка (например, страница отсутствует);

·                   NavigationStopped — событие, которое генерируется в тот момент, когда текущая навигация была прервана с помощью метода StopLoading или путем выполнения другой навигации;

·                   StopLoading — завершает загрузку данных и прекращает навигацию на указанную страницу;

·                   Navigate   —   самый  важный метод,  который   позволяет   выполнять навигацию на указанную страницу.

Перечисленные     методы      достаточно      просты,      поэтому      реализация навигации  не   составляет  труда.   Если   говорить  об   использовании  этих методов в    сгенерированном коде,   рекомендуется  обратиться  к   файлу LayoutAwarePage.cs, который генерируется при создании любого проекта. Там есть очень интересный код:

protected virtual void GoHome(object sender, RoutedEventArgs e)

{

if (this.Frame != null)

{

while (this.Frame.CanGoBack) this.Frame.GoBack();

}

}

Тут описан обработчик события, которое возникает при нажатии кнопки Home на панели приложения. Как Вы видите, для перехода  на  основную страницу совершена попытка  вернуться на  главную  вследствие  пролистывания всех страниц в  обратном порядке. При  этом  объект типа Frame можно получить через одноименное свойство объекта Page, а потом осуществлять навигацию.

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

  • Комментарии