Разработка Windows 10 - Навигация

В приложениях универсальной платформы Windows (UWP) навигация - это гибкая модель структур навигации, элементов навигации и функций системного уровня. Он обеспечивает множество интуитивно понятных пользовательских интерфейсов для перемещения между приложениями, страницами и контентом.

Есть некоторые ситуации и сценарии, когда весь контент и функциональность могут легко уместиться на одной странице, и разработчикам не нужно создавать несколько страниц. Однако в большинстве приложений несколько страниц используются для взаимодействия между различным контентом и функциями.

Когда в приложении более одной страницы, разработчикам очень важно обеспечить правильную навигацию.

Модели страниц

Обычно в приложениях универсальной платформы Windows (UWP) используется одностраничная модель навигации.

Важные особенности -

  • Одностраничная модель навигации сохраняет весь контекст вашего приложения, а также дополнительный контент и данные в центральном фрейме.

  • Вы можете разделить содержимое вашего приложения на несколько страниц. Однако при переходе с одной страницы на другую ваше приложение загружает страницы в форму главной страницы.

  • Ни главная страница вашего приложения не выгружается, ни код и данные не выгружаются, это упрощает управление состоянием и обеспечивает более плавную анимацию перехода между страницами.

Многостраничная навигация также используется для навигации между разными страницами или экранами, не беспокоясь о контексте приложения. При многостраничной навигации каждая страница имеет свой собственный набор функций, пользовательский интерфейс, данные и т. Д.

Многостраничная навигация обычно используется на веб-страницах внутри веб-сайта.

Структура навигации

При многостраничной навигации каждая страница имеет свой собственный набор функций, пользовательский интерфейс, данные и т. Д. Например, фото-приложение может иметь одну страницу для захвата фотографий, а затем, когда пользователь хочет отредактировать фотографию, он переходит на другую страницу. а для поддержки библиотеки изображений у нее есть еще одна страница.

Структура навигации вашего приложения определяется тем, как организованы эти страницы.

Ниже приведены способы структурирования навигации в вашем приложении.

Иерархия

В этом типе структурирования навигации

  • Страницы организованы в древовидную структуру.

  • Каждая дочерняя страница имеет только одного родителя, но у родителя может быть одна или несколько дочерних страниц.

  • Чтобы попасть на дочернюю страницу, вы должны пройти через родительскую.

Сверстник

В этом типе навигации -

  • Страницы существуют бок о бок.
  • Переходить с одной страницы на другую можно в любом порядке.

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

Возьмем пример, содержащий три страницы.

  • Создайте пустое приложение UWP с именем UWPNavigation.

  • Добавьте еще две пустые страницы, щелкнув правой кнопкой мыши проект в Solution Explorer и выберите Add > New Item в меню, которое откроет следующее диалоговое окно.

  • Выберите пустую страницу на средней панели и нажмите кнопку Add кнопка.

  • Теперь добавьте еще одну страницу, выполнив указанные выше действия.

Вы увидите три страницы в обозревателе решений - MainPage, BlankPage1, и BlankPage2.

Ниже приведен код XAML для MainPage в котором добавлены две кнопки.

<Page 
   x:Class = "UWPNavigation.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPNavigation" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d">  
	
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
      <Hub Header = "Hi, this Main Page"/> 
      <Button Content = "Go to Page 1" Margin = "64,131,0,477" Click = "Button_Click"/>
      <Button Content = "Go to Page 2" Margin = "64,210,0,398" Click = "Button_Click_1"/> 
   </Grid> 
	
</Page>

Ниже приведен код C # для двух кнопок на MainPage, который перейдет на две другие страницы.

using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls;
  
// The Blank Page item template is documented at 
   http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409  

namespace UWPNavigation {

   /// <summary> 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary> 
	
   public sealed partial class MainPage : Page {
      public MainPage() {
         this.InitializeComponent(); 
      }  
		
      private void Button_Click(object sender, RoutedEventArgs e){ 
         this.Frame.Navigate(typeof(BlankPage1)); 
      } 
		
      private void Button_Click_1(object sender, RoutedEventArgs e) {
         this.Frame.Navigate(typeof(BlankPage2)); 
      } 
		
   } 
}

Код XAML для blank page 1 показано ниже.

<Page 
   x:Class = "UWPNavigation.BlankPage1" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPNavigation" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d"> 
   
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
      <Hub Header = "Hi, this is page 1"/> 
      <Button Content = "Go to Main Page" Margin = "64,94,0,514" Click = "Button_Click"/> 
   </Grid> 
	
</Page>

Код C # для кнопки - событие нажатия на blank page 1, который приведет к переходу на главную страницу, как показано ниже.

using System; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
 
// The Blank Page item template is documented at
   http://go.microsoft.com/fwlink/?LinkId=234238 
	
namespace UWPNavigation {

   /// <summary> 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary> 
	
   public sealed partial class BlankPage1 : Page {
    
      public BlankPage1() {
         this.InitializeComponent(); 
      }
		
      private void Button_Click(object sender, RoutedEventArgs e) {
         this.Frame.Navigate(typeof(MainPage)); 
      }
		
   } 
}

Ниже приведен код XAML для blank page 2.

<Page 
   x:Class = "UWPNavigation.BlankPage2" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPNavigation" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d"> 
   
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
      <Hub Header = "Hi, this is page 2"/>
      <Button Content = "Go to Main Page" Margin = "64,94,0,514" Click = "Button_Click"/> 
   </Grid> 
	
</Page>

Ниже приведен код C # для события нажатия кнопки на blank page 2, который перейдет на главную страницу.

using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
 
// The Blank Page item template is documented at  
   http://go.microsoft.com/fwlink/?LinkId=234238
	
namespace UWPNavigation {

   /// <summary> 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary>
	
   public sealed partial class BlankPage2 : Page {
   
      public BlankPage2(){ 
         this.InitializeComponent(); 
      } 
		
      private void Button_Click(object sender, RoutedEventArgs e) {
         this.Frame.Navigate(typeof(MainPage)); 
      }
		
   } 
}

Когда приведенный выше код скомпилирован и запущен, вы увидите следующее окно.

Когда вы нажимаете любую кнопку, вы переходите на соответствующую страницу. Давайте нажмем наGo to Page 1 и отобразится следующая страница.

Когда вы нажимаете на кнопку 'Go to Main Page', он вернется на главную страницу.