Статьи

WinRT XAML Переход от страницы к странице: чем она отличается от Windows Phone 7

После получения Visual Studio 2011 для работы с Windows 8 Consumer Preview я пытался разобраться в деталях WinRT / Metro. Сейчас я решил остаться с XAML-стороной, потому что это мне наиболее знакомо. Было интересно узнать, как повседневные задачи решаются с помощью WinRT по сравнению с такой платформой, как WP7.

С другой стороны: я не уверен, стоит ли мне говорить о написании «приложений в стиле Metro» вместо «WinRT-приложений». Полагаю, время покажет, что станет де-факто, но лично мне больше нравится WinRT.

Навигация по страницам

По сравнению с платформой Windows Phone 7, навигация между различными частями приложения очень похожа в WinRT. WinRT-приложение может содержать несколько страниц, и для навигации между ними требуется просто вызов метода Navigate . Что хорошо, так это то, что вам не нужно перемещаться с использованием URI, как в WP7, и вместо этого вы можете просто передать тип следующей страницы.

this.Frame.Navigate(typeof(BlankPage));

образУчитывая, что мы создали проект Blank Application и добавили в него еще одну BlankPage, мы можем легко перейти с первой страницы на следующую:

<Grid>
     <Button Content="Navigation" Click="GoForward"/>
</Grid>

 

private void GoForward(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(AnotherPage));
}

Если мы запустим приложение, мы увидим, что навигация работает. Но пользователь не может вернуться назад.

Навигация назад

Переход к предыдущей странице еще проще, чем переход вперед. Со второй страницы нам просто нужно вызвать GoBack-метод :

this.Frame.GoBack();

Передача параметров

В Windows Phone 7 для передачи параметров между страницами требуется, чтобы параметры были добавлены в строку запроса перемещаемой страницы. В WinRT мы можем передавать объекты. Объект передается с использованием второго параметра метода Navigate:

this.Frame.Navigate(typeof(AnotherPage), customer);

На странице, к которой мы перешли, мы можем получить доступ к объекту, используя NavigationEventArgs.Parameter :

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var cust = e.Parameter as Customer;
}

Навигация назад по нескольким страницам

Навигация по нескольким страницам в WinRT проще, чем в WP7. Мы можем вызывать метод GoBack несколько раз в цикле. В WP7 это вызовет исключение. Учитывая ситуацию, когда мы добавляем третью страницу в приложение и хотим, чтобы она имела кнопку «Перейти домой», мы можем вызвать следующий код, который переместит пользователя обратно на первую страницу:

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

Определение первой страницы

В WinRT начальная страница приложения может быть настроена через App.xaml.cs. Замена BlankPage на AnotherPage заставляет наше приложение запускаться со второй страницы:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
    {
        //TODO: Load state from previously suspended application
    }
 
    // Create a Frame to act navigation context and navigate to the first page
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(AnotherPage));
 
    // Place the frame in the current Window and ensure that it is active
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}