Навигация на страницу Windows Phone 7, расположенную во внешней сборке

Очень часто в приложении Windows Phone 7 требуется разделить функциональность приложения на несколько сборок. И в этом случае часто возникают вопросы – как использовать страницу (XAML), расположенную не в основной сборке. Мне пришло несколько вопросов подобного характера в почту, отвечаю здесь всем сразу.

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

За навигацию в Windows Phone 7 отвечает объект NavigationService. Он содержит методы Navigate() и GoBack(), которые позволяют перемещаться по страницам и изменять содержимое стека навигации. Важным моментом при этом является то, что для адресации страницы используется объект Uri (при этом все пути к страницам – относительные).

Типичный пример кода для перехода на страницу в основной сборке выглядит так:

NavigationService.Navigate(new Uri("/About.xaml", UriKind.Relative));

В данном случае методу Navigate() передается объект Uri, который и содержит путь до нужной страницы.

Навигация на внешние страницы

Для навигации на страницы, расположенные во внешней сборки необходимо:

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

С первым пунктом все достаточно просто – нужно добавить ссылку (Add Reference) на сборку, содержащую требуемую страницу. Для указания адреса страницы следует воспользоваться стандартным для приложений Silverlight синтаксисом и указать имя сборки:

NavigationService.Navigate(new Uri("/Project1;component/MyPage.xaml", UriKind.Relative));

Путь до страницы внутри сборки может быть вложенным:

NavigationService.Navigate(new Uri("/Project1;component/Views/Part1/Page1.xaml", UriKind.Relative));

Аналогичным образом можно делать ссылки из элемента управления HyperlinkButton:

<HyperlinkButton NavigateUri="/Project;component/MyPage.xaml" Content="Navigate to my page"/>