Udostępnij za pośrednictwem


Silverlight Navigation Framework для мульти-страничных приложений

 

Silverlight постепенно двигается от предоставления контролов и UX к простым framework’ам для создания полноценных приложений. Я имею виду, что в Silverlight 3 появился новый framework для работы с мульти-страничными приложениями. Silverlight 3 представляет новый тип приложений “Silverlight Navigation Application”.

SLNav101_5F4B0DE2[1]

Этот шаблон создает в VisualStudio пакет файлов, который позволяет использовать гибкий настраиваемый framework для мульти-страничных приложений. Измененный шаблон изображен на screenshot’е. Хочу обратить внимание на то, что ссылка в браузере и заголовок изменяются при навигации по страницам.

nav_sl

VisualStudio создает обыкновенный “MainPage.xaml/cs”, “App.xaml/cs” и дополнительную папку “Assets”,которая содержит“Styles.xaml”, а также папку с представлениями, содержащую 3 стандартных представления:

  • “Home.xaml”
  • “About.xaml”
  • “ErrorWindow.xaml”

 

nav_sl2

Каждый содержит код позади.

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

Frameимапингссылок

Если вдаваться в подробности, базовая структура хранится в файле “MainFrame.xaml”, который является экземпляром “System.Windows.Controls.Frame”; его можно найти в пространстве имен “System.Windows.Controls.Navigation”. Frame поддерживает навигацию между страницами и, конечно же, передачу данных между страницами.

Вы можете передавать параметры при навигации. Данный пример изображен на sceenshot’е ниже.

    1: <!-- snippet from the Silverlight Documentation -->
    2: <navigation:Frame.UriMapper>
    3:        <uriMapper:UriMapper>
    4:            <uriMapper:UriMapping 
    5:                Uri="/ProductDetail/{productid}" 
    6:                MappedUri="/Views/ProductDetail.xaml?ProductId={productid}"/>
    7:            <uriMapper:UriMapping 
    8:                Uri="/{pageName}" 
    9:                MappedUri="/Views/{pageName}.xaml"/>
   10:        </uriMapper:UriMapper>
   11:    </navigation:Frame.UriMapper>

У вас может возникнуть и другой вопрос – существует ли возможность передачи данных между страницами. Ответ – “существует, для этого можно воспользоваться DataContext”.

sl_nav3

sl_nav4

Вот такая новая фича появилась в Silverlight 3. Думаю, она вам очень поможет в разработке мульти-страничных приложений.