Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Примечание.
Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.
До сих пор вы видели два класса, производных от Page: ContentPage и NavigationPage. В этой главе представлены два других:
MasterDetailPageуправляет двумя страницами — Главная и ДеталиTabbedPageуправляет несколькими дочерними страницами, доступными через вкладки
Эти типы страниц предоставляют более сложные параметры навигации, чем NavagationPage обсуждаемые в главе 24. Навигация по страницам.
Главная и Детали
MasterDetailPage определяет два свойства типа Page: Master и Detail. Обычно каждому из этих свойств присваивается ContentPage. MasterDetailPage отображает эти две страницы и переключается между ними.
Существует два фундаментальных способа переключения между этими двумя страницами:
- разбиение, где главные и детальные данные находятся рядом друг с другом
- всплывающее окно — страница сведений частично перекрывает главную страницу.
Существует несколько разновидностей подхода для всплывающих окон (слайд, перекрывающее и переключающее), но обычно они зависят от платформы. Свойству MasterDetailBehavior объекта MasterDetailPage можно присвоить значение одного из элементов перечисления MasterBehavior:
Однако это свойство не влияет на телефоны. Телефоны всегда имеют режимы работы с всплывающим окном. Режим работы с разделением имеют только планшеты и компьютеры (Windows).
Изучение этих режимов работы
Образец MasterDetailBehaviors позволяет экспериментировать с режимом по умолчанию на различных устройствах. Программа содержит две отдельные производные ContentPage, которые являются производными для основных и детальных данных (со свойством Title, установленным в обоих), и другим классом, который является производной от MasterDetailPage, объединяющего их. Страница деталей заключена в NavigationPage, так как программа UWP не будет работать без нее.
Для платформ Windows 8.1 и Windows Phone 8.1 требуется, чтобы растровое изображение было установлено в свойство Icon главной страницы.
Снова за учебу
Пример SchoolAndDetail использует несколько другой подход к созданию программы для показа учащихся из библиотеки SchoolOfFineArt.
Свойства Master и Detail определяются с помощью визуальных деревьев в файле SchoolAndDetailPage.xaml, который является производным от MasterDetailPage. Это расположение позволяет устанавливать привязки данных между главной страницей и страницами деталей.
Этот файл XAML также задает для свойства IsPresented из MasterDetailPage значение True. В результате главная страница будет отображаться при запуске; по умолчанию отображается страница деталей. Файл SchoolAndDetailPage.xaml.cs задает значение IsPresented для false при выборе элемента из ListView на главной странице. Затем отобразится страница деталей:
Собственный пользовательский интерфейс
Несмотря на то, что Xamarin.Forms предоставляет пользовательский интерфейс для переключения между представлениями "Главная" и "Детали", вы можете указать собственное представление. Для этого:
- Задайте для свойства
IsGestureEnabledзначениеfalse, чтобы отключить прокрутку. - Переопределите метод
ShouldShowToolbarButtonи возвратитеfalse, чтобы скрыть кнопки на панели инструментов в Windows 8.1 и Windows Phone 8.1.
Затем необходимо предоставить средства для переключения между главной страницей и страницами деталей, например с помощью примера ColorsDetail.
В примере MasterDetailTaps демонстрируется другой подход, использующий TapGestureRecognizer на главной странице и на страницах деталей.
TabbedPage
TabbedPage — это коллекция страниц, которые можно переключать с помощью вкладок. Она является производной от MultiPage<Page> и не определяет открытые свойства или методы самостоятельно. MultiPage<T>, однако, определяет свойство:
- свойство
Childrenс типомIList<T>.
Эту коллекцию нужно заполнять Children объектами страницы.
Другой подход позволяет определять дочерние элементы TabbedPage так же, как и ListView, используя эти два свойства, которые автоматически создают страницы с вкладками:
ItemsSourceтипаIEnumerableItemTemplateтипаDataTemplate
Однако этот подход плохо работает в iOS, когда коллекция содержит более нескольких элементов.
MultiPage<T> определяет два дополнительные свойства, которые позволяют отслеживать текущую просматриваемую страницу:
CurrentPageтипаT, который ссылается на страницуSelectedItemтипаObject, который ссылается на объект в коллекцииItemsSource
MultiPage<T> также определяет два события:
PagesChangedпри изменении коллекцииItemsSourceCurrentPageChangedпри изменении просматриваемой страницы
Дискретные страницы вкладок
Пример DiscreteTabbedColors состоит из трех страниц с вкладками, отображающие цвета тремя разными способами. Каждая вкладка является производной ContentPage, а затем производная TabbedPage DiscreteTabbedColorsPage.xaml объединяет три страницы.
Для каждой страницы, отображаемой в TabbedPage, свойство Title является обязательным для указания текста на вкладке, а в Apple Store требуется также использовать значок, поэтому для iOS установлено свойство Icon:
В примере StudentNotes есть домашняя страница со списком всех учащихся. При касании учащийся переходит на производную TabbedPage, StudentNotesDataPage, которая включает три объекта ContentPage в своем визуальном дереве, один из которых позволяет вводить некоторые примечания для этого учащегося.
Использование ItemTemplate
В примере MultiTabbedColor используется класс NamedColor из библиотеки Xamarin.FormsBook.Toolkit. Файл MultiTabbedColorsPage.xaml устанавливает свойство DataTemplate от TabbedPage в визуальное дерево, начинающееся с ContentPage, которое содержит привязки к свойствам NamedColor (включая привязку к свойству Title).
Однако это проблематично для iOS. С помощью этого метода можно отобразить только несколько элементов, к тому же в нем отсутствует правильный способ для присвоения значков.

