Главная » WPF » Управление журналом WPF

0

Итак,  мы научились  управлять навигацией;  мы можем указать,  когда и куда следует переходить. Следующая задача, с которой часто сталкиваются разработ# чики  приложений со средствами  навигации,  – это управление  журналом.  Пос# кольку журнал следит за тем, где пользователь побывал, и отвечает за состояние кнопок Вперед  и Назад, есть много ситуаций,  в которых им желательно  управ# лять.  Быть  может, самые распространенные – это корзина  для  покупок  (после оформления заказа журнал  следует очистить,  чтобы исключить  случайную  пов# торную отправку того же заказа)  и страница регистрации (после того как пользо# ватель зарегистрировался, кнопка Назад должна вести на начальную страницу, а не снова на страницу регистрации) (рис. 2.21).

Чтобы понять, как управлять журналом, изменим предыдущий  пример, вклю#

чив в него начальную страницу:

<!— home.xaml —>

<Page … x:Class=’EssentialWPF.Home’ WindowTitle=’Home’

<TextBlock>

Welcome to the application. I can say

<Hyperlink NavigateUri=’name.xaml’>hello</Hyperlink>

to you.

</TextBlock>

</Page>

<!— app.xaml —>

<Application … x:Class=’EssentialWPF.App’ StartupUri=’home.xaml’

</Application>

Hello

Рис. 2.21. Так должны вести себя элементы навигации после того, как пользователь зарегистрировался

Далее нужно модифицировать страницу  регистрации (name.xaml), так чтобы она удаляла  себя из журнала  после успешного  получения имени  пользователя. Весь API для работы с журналом  находится  в классе NavigationService:

public sealed class NavigationService {

public bool CanGoBack { get; }

public bool CanGoForward { get; }

public void AddBackEntry(CustomContentState state);

public void GoBack();

public void GoForward();

public JournalEntry RemoveBackEntry();

}

На рис. 2.21 ясно видно, что мы не хотим помещать страницу name.xaml в жур#

нал, поскольку  кнопка  Назад должна  вести со страницы  «Hello»  на начальную

страницу.   Для   удаления    записи   из   журнала   достаточно   вызвать   метод

RemoveBackEntry по завершении навигации:

void Page_Navigated(object sender, NavigationEventArgs e) {

_navigation.RemoveBackEntry();

}

Помимо управления журналом,  мы можем еще и опрашивать его. Чаще всего это бывает необходимо для помещения  на страницу кнопки Назад в нужный мо# мент времени.  Задача  решается  тривиально: свойство  CanGoBack позволяет  ак# тивировать или деактивировать кнопку, а метод GoBack выполняет саму опера# цию перехода.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии