Многостраничные приложения в Silverlight - Создание первого проекта

ОГЛАВЛЕНИЕ

Создание первого проекта

Давайте начнем с создания нового приложения Silverlight в Visual Studio (позволив ему создать проект веб-приложения ASP.NET) и назовем его PageSwitchSimple.

Обратите внимание на то, что по умолчанию Visual Studio создает одну страницу для вас - Page.xaml, и эта страница является пользовательским элементом управления (это можно заметить в режиме просмотра Xaml данной страницы Page.xaml).

Ключевые файлы

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

  1. Пользовательский элемент управления, названный PageSwitcher.xaml и его файл с фоновым кодом PageSwitcher.xaml.cs
  2. Статический класс, названный Swticher
  3. Интерфейс: ISwitchable

В дополнение ко всему нам надо добавить четыре строки к App.xaml.cs, но это мы обсудим позже.

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

PageSwitcher.xaml

Вся работа будет выполнена в основном проекте (тот, что содержит Page.xaml и App.xaml).

Добавьте PageSwitcher.xaml точно так же, как вы добавили бы любой другой пользовательский элемент управления, но как только вы создадите ее, удалите табличную сетку, которую Visual Studio создает за вас и измените ширину и высоту UserControl на 800 x 600 (данные значения могут быть произвольными)

<UserControl x:Class="PageSwitchSimple.PageSwitcher"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="800" Height="600">
</UserControl>

Данный UserControl вы должны оставить пустым потому, что мы заполним его программным путем содержимым других страниц. Сам по себе данный элемент представляет собой резервуар куда мы будет "заливать" каждую страницу, которую нам надо просмотреть.

Основой PageSwitcher.xaml.cs является перегруженный метод Navigate, который получает UserControl либо UserControl и объект.

using System;
using System.Windows.Controls;
 
namespace PageSwitchSimple
{
   public partial class PageSwitcher : UserControl
   {
      public PageSwitcher()
      {
         InitializeComponent();
      }
 
      // 1-ая перегрузка
      public void Navigate( UserControl nextPage )
      {
         this.Content = nextPage;
      }
 
       // 2-ая перегрузка
      public void Navigate( UserControl nextPage, object state )
      {
         this.Content = nextPage;
         ISwitchable s = nextPage as ISwitchable;
         if ( s != null )
         {
            s.UtilizeState( state );
         }
         else
         {
            throw new ArgumentException( "nextPage is not ISwitchable! "
              + nextPage.Name.ToString() );
         }
      }
   }
}

Первая перегрузка метода Navigate устанавливает содержимое PageSwitcher в любой передаваемый UserControl. Поскольку вы передаете страницу, результатом будет отображение переданной страницы в качестве текущей страницы.

Проверка предположений

Далее мы создадим некоторый временный код. Для начала, закомментируйте вторую перегрузку метода.

Во-вторых, добавьте в конструктор следующую строку:

this.Content = new Page2();

Наконец откройте App.xaml.cs и найдите метод Application_Startup. Измените установку RootVisual с Page() в PageSwitcher() и запустите приложение. Вы должны увидеть Page2.

Запустив приложение в отладчике и установив точку остановки на методе Application_Startup вы можете увидеть, что на самом деле создается PageSwitcher и в его конструкторе его же содержимое заполняется новым экземпляром Page2.

Это демонстрирует то, что наши предположения реальны - когда PageSwitcher заполняет свое содержимое пользовательским элементом управления, то это выглядит так, как будто все, что отображается,  это этот самый пользовательский интерфейс.