Многостраничные приложения в Silverlight - Контрольная точка синхронизации

ОГЛАВЛЕНИЕ

Контрольная точка синхронизации

На данном этапе PageSwitchSimple должен иметь в себе два проекта, один из которых  назван PageSwitchSimple, а второй - PageSwitchSimple.web. PageSwitchSimple должен выглядеть следующим образом:

Рисунок 8-4. PageSwitchSimple

До того, как мы сможем продолжить, нам нужно обновить App.xaml.cs. Замените содержимое Application_Startup следующими строками,

PageSwitcher pageSwitcher = new PageSwitcher();
this.RootVisual = pageSwitcher;
Switcher.pageSwitcher = pageSwitcher;
Switcher.Switch( new Page() );

Это создаст экземпляр PageSwitcher и установит  значение для RootVisual (которое может быть установлено только единажды при запуске и не может быть сброшено во время работы), а также устанавливает статическое свойство pageSwitcher в то же самое значение. Наконец, четвертая строка вызывает статический метод Switch, передавая новый экземпляр страницы (Page) и заставляя механизм переключения отображать первую страницу.

Давайте создадим очень простые страницы Page и Page2 для того, чтобы протестировать созданный механизм.

В Page добавьте следующий код Xaml в табличную сетку,

<TextBlock Text="Your Name: " FontSize="18" />
<TextBox x:Name="Name" FontSize="18" Width="150" Height="35"
VerticalAlignment="Top" Margin="5"/>
<Button x:Name="ChangePage" Content="Change" FontSize="18"
Width="100" Height="50" />

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

В коде Page.xaml.cs вам всего лишь необходимо зарегистрировать и затем реализовать обработчик события кнопки, где вы получите текст из текстового поля и передадите его новому экземпляру Page2. Вы перейдете к этому новому экземпляру Page2 при помощи статического метода Switch класса Switcher,

public Page()
{
  InitializeComponent();
  ChangePage.Click += new RoutedEventHandler( ChangePage_Click );
}
 
void ChangePage_Click( object sender, RoutedEventArgs e )
{
  Switcher.Switch( new Page2(), Name.Text );
}

По правде говоря, это все сводится к одной строке очень интересного кода, вызова статического метода Switch, при этом передавая новую страницу Page2 и текст. До того, как мы исследуем принцип работы, давайте создадим Page2.  В Page2.xaml мы добавим текстовое поле для того, чтобы отображать любое сообщение, посланное из Page, а также кнопку возврата на первую страницу,

<TextBlock x:Name="Message" Text="Page2" FontSize="18" />
<Button x:Name="ChangePage" Content="Change" FontSize="18"
Width="100" Height="50" />

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

<Grid x:Name="LayoutRoot" Background="Bisque">

Код Page2 должен реализовывать интерфейс ISwitchable, который требует два шага: объявление того, что интерфейс поддерживается,

public partial class Page2 : UserControl, ISwitchable

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

public void UtilizeState( object state )
{
  Message.Text = state.ToString();
}

Все что осталось сделать в данном файле, так объявить обработчик события для кнопки,

public Page2()
{
   InitializeComponent();
   ChangePage.Click += new RoutedEventHandler( ChangePage_Click );
}

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

void ChangePage_Click( object sender, RoutedEventArgs e )
{
  Switcher.Switch( new Page() );
}

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

Рисунок 8-5. Второй тест по переключению страниц

Обзор деталей

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