“第 25 章: 页面种类”摘要

注意

本书于 2016 年春季出版,之后再未更新。 书中有许多内容仍然有价值,但有些内容已过时,有些主题不再完全正确或完整。

到目前为止,你已经了解了两个派生自 Page 的类,即 ContentPageNavigationPage。 本章节将介绍另外两个类:

这些页面类型提供了比第 24 章:页面导航中讨论的 NavagationPage 更复杂的导航选项。

母版页和详细信息页

MasterDetailPage 定义了 Page 类型的两个属性:MasterDetail。 通常会将这两个属性都设置为 ContentPageMasterDetailPage 在这两个页面之间显示和切换。

在这两个页面之间切换有两种基本方法:

  • 拆分:母版页和详细信息页并排显示
  • 弹出框:详细信息页覆盖或部分覆盖母版页

弹出框方法有几种变体(滑动、重叠和交换),但这些变体通常都是平台相关的。 可以将 MasterDetailPageMasterDetailBehavior 属性设置为 MasterBehavior 枚举的成员:

不过,此属性对电话没有影响。 电话始终有弹出框行为。 只有平板电脑和桌面窗口才能有拆分行为。

探索行为

通过 MasterDetailBehaviors 示例可以试验不同设备上的默认行为。 此程序包含用于母版页和详细信息页的两个单独 ContentPage 衍生物(对两者都设置了 Title 属性),以及另一个派生自合并它们的 MasterDetailPage 的类。 详细信息页包含在 NavigationPage 中,因为 UWP 程序没有它就无法正常运行。

Windows 8.1 和 Windows Phone 8.1 平台要求,将位图设置为母版页的 Icon 属性。

重返校园

SchoolAndDetail 示例采用了一种稍微不同的方法来构造程序,以显示 SchoolOfFineArt 库中的学生。

MasterDetail 属性是用 SchoolAndDetailPage.xaml 文件中的可视化树定义的,此文件派生自 MasterDetailPage。 借助这种安排,可以在母版页和详细信息页之间设置数据绑定。

此 XAML 文件还将 MasterDetailPageIsPresented 属性设置为 True。 这样,母版页会在启动时显示;默认显示的是详细信息页。 当用户从母版页的 ListView 中选择项时,SchoolAndDetailPage.xaml.cs 文件将 IsPresented 设置为 false。 随后详细信息页显示:

学校页和详细信息页的三倍屏幕截图

你自己的用户界面

尽管 Xamarin.Forms 提供了用于切换母版视图和详细信息视图的用户界面,但你也可以提供自己的用户界面。 为此,请执行以下操作:

  • IsGestureEnabled 属性设置为 false,以禁用轻扫
  • 重写 ShouldShowToolbarButton 方法,并返回 false,以隐藏 Windows 8.1 和 Windows Phone 8.1 上的工具栏按钮。

然后,必须提供在母版页和详细信息页之间切换的方法,如 ColorsDetail 示例所示。

MasterDetailTaps 示例展示了在母版页和详细信息页上使用 TapGestureRecognizer 的另一种方法。

TabbedPage

TabbedPage 是可以使用选项卡切换的页面的集合。 它派生自 MultiPage<Page>,并且没有定义自己的公共属性或方法。 不过,MultiPage<T> 确定定义了一个属性:

使用页面对象填充此 Children 集合。

另一种定义 TabbedPage 子元素的方法很像 ListView 一样,即使用两个自动生成选项卡页的属性:

不过,当集合包含多个项时,这种方法在 iOS 上并不适用。

MultiPage<T> 定义了另外两个属性,可便于跟踪当前查看的页面:

MultiPage<T> 还定义了两个事件:

离散选项卡页

DiscreteTabbedColors 示例由三个选项卡页组成,它们以三种不同的方式显示颜色。 每个选项卡都是 ContentPage 衍生物,然后 TabbedPage 衍生物 DiscreteTabbedColorsPage.xaml 合并这三页。

对于 TabbedPage 中显示的每一页,必须使用 Title 属性来指定选项卡中的文本;Apple Store 还要求使用图标,因此为 iOS 设置了 Icon 属性:

离散选项卡颜色的三倍屏幕截图

StudentNotes 示例包含列出所有学生的主页。 点击学生后,便会转到 TabbedPage 衍生物 StudentNotesDataPage,它将三个 ContentPage 对象合并到自己的可视化树中,其中一个对象允许为相应学生输入一些笔记。

使用 ItemTemplate

MultiTabbedColor 示例使用 Xamarin.FormsBook.Toolkit 库中的 NamedColor 类。 MultiTabbedColorsPage.xaml 文件将 TabbedPageDataTemplate 属性设置为以 ContentPage 开头的可视化树,其中包含对 NamedColor 属性的绑定(包括对 Title 属性的绑定)。

不过,这在 iOS 上是有问题的。 只有少数项可以显示,并且没有好办法向它们提供图标。