Windows Phone提供了Panorama和Pivot这两种控件供用户横向切换导航的方式来显示具有内容比较相关的页面。本文主要对这两个控件进行描述,包括如何使用,以及一些最佳实践。

其中包括如下部分:

Panorama控件

Pivot控件

如何在二者之间选择

在项目中填加它们

Panorama控件示例

Pivot控件示例

最佳实践

Panorama控件

Panorama控件用来在一个很长的横向面板上显示相关的内容,屏幕之外的内容可以依次切入到屏幕中,可以通过左右滑动的方式来切换它们。当看到其中的一个元素的时候,可以在屏幕右边显示出了一点下一屏的内容,这样你就可以知道在当前屏幕的下一屏还是有内容的。当浏览到内容的最后一屏再继续切换的话,则会回到第一屏。另外Panorama控件自身内置了触控和导航,通常来说这些已经够用,基本上不需要再为其实现特殊的手势功能。

在Windows Phone系统下,内置的People和Music+Videos界面就是一个典型的案例。下图就是在People界面下的Panorama界面效果。

Pivot控件

Pivot控件用来过滤大量的数据集,在不同的视图中查看它们,或者针对同一个数据切换不同的视图。Pivot控件跟Tab控件很像,但它是专门为Windows Phone和触控界面设计的。它通过视图间的横向互相切换,这样就可以让用户 用内置的触控功能来回导航。

在Windows Phone内置的功能中,E-Mail和Calendar功能就是Pivot的一个应用。下面是E-Mail界面的效果。

如何在二者之间选择

虽然Panorama和Pivot都比较像,但是在决定具体使用哪一个的时候还需要注意一些。

使用Panorama的话可以让用户浏览内容并且提供了一个更多操作的入口点。它比较适合用来显示从多钟媒体源聚合过来的信息。它不应该在程序中只提供单一独立的操作,它应该实现那种对更多内容的一个引导,通过具有目标导向性的功能来完成用户体验。

Pivot控件使用户可以过滤,排序或者在程序中对内容进行组织。它最好是只显示相同类型的元素或者数据。其中的各个标题应用自然语言去描述。这种左右切换导航方式的模型会使用户更有效率地找到他们需要的信息。

在项目中填加它们

可以通过三种方式填加它们。

工具栏

直接从工具栏拖拽的方式在现有页面中填加它们,但默认这两个控件是不在工具栏中的,要让他们出现在这里,需要右键工具栏然后选择Choose Items。

使用页面模版

在解决方案管理器中右键项目,点Add->New Item。在新建项目对框框中,选择Windows Phone Panorama Page或者Windows Phone Pivot Page。

通过项目模版

新建一个项目,项目类型选择Windows Phone Panorama Application或者Windows Phone Pivot Application。

无论以这三种方式的哪种方式使用这两个控件,下面的程序集都会被自动填加。

Microsoft.Phone.Controls.dll

同样如下的XML命名空间也会被填加到页面。

xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"

Panorama控件示例

下面的示例创建了一个带背景图片的Panorama控件,其中有三个PanoramaItem控件。背景图片建议的大小是2000*800。PanoramaItem是Panorama控件的子元素。一个Panorama控件可以有多个PanoramaItem,用户可以通过内置的触控功能来进行动态的切换。

XAML

<Grid x:Name="LayoutRoot" Background="Transparent">

<!--Panorama Control-->

<controls:Panorama Title="my pictures">

<controls:Panorama.Background>

<ImageBrush ImageSource="PanoramaBackground.png" />

</controls:Panorama.Background>

<!--Panorama item one-->

<controls:PanoramaItem>

<TextBlock FontSize="30" Text="This example demonstrates

the Panorama control in a Windows Phone application." TextWrapping="Wrap" />

</controls:PanoramaItem>

<!--Panorama item two-->

<controls:PanoramaItem>

<ListBox FontSize="35">

<ListBoxItem Content="all" />

<ListBoxItem Content="recent" />

<ListBoxItem Content="favorites" />

</ListBox>

</controls:PanoramaItem>

<!--Panorama item three-->

<controls:PanoramaItem Orientation="Horizontal">

<Grid>

<Grid HorizontalAlignment="Center" VerticalAlignment="Center">

<Grid.RowDefinitions>

...

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

...

</Grid.ColumnDefinitions>

<Image Source="Creek.jpg" Grid.Row="0" Grid.Column="0"

Margin="10"/>

<Image Source="Desert.jpg" Grid.Row="0" Grid.Column="1"

Margin="10"/>

...

</Grid>

</Grid>

</controls:PanoramaItem>

</controls:Panorama>

</Grid>

第一个PanoramaItem有一个TextBlock控件里面包含一段文本。

第二个PanoramaItem有一个ListBox控件,其中有三个元素。

第三个PanoramaItem的Orientation属性设置成了横向,这样就可以看到所有的图片缩略图。Panorama控件允许你显示比屏幕更宽的内容。通过把PanoramaItem的Orentation属性设置成横向,这样内容宽于屏幕的部分就不会被截断并且可以横向滑动浏览。

Pivot控件示例

下面示例创建一个Pivot控件显示用户任务中的不同视图。其中有三个PivotItem控件,每个部分根据全部任务,今日任务和明日任务来过滤数据。

XAML

<!--LayoutRoot is the root grid where all page content is placed-->

<Grid x:Name="LayoutRoot" Background="Transparent">

<controls:Pivot Title="my tasks">

<!--Pivot item one-->

<controls:PivotItem Header="all">

<ListBox FontSize="30">

<ListBoxItem Content="Dentist appointment" />

<ListBoxItem Content="Pickup laundry" />

<ListBoxItem Content="Service car" />

<ListBoxItem Content="Send birthday gift to mom" />

<ListBoxItem Content="Grocery" />

</ListBox>

</controls:PivotItem>

<!--Pivot item two-->

<controls:PivotItem Header="today">

<ListBox FontSize="30">

<ListBoxItem Content="Dentist appointment" />

<ListBoxItem Content="Pickup laundry" />

</ListBox>

</controls:PivotItem>

<!--Pivot item three-->

<controls:PivotItem Header="tomorrow">

<ListBox FontSize="30">

<ListBoxItem Content="Service car" />

<ListBoxItem Content="Send birthday gift to mom" />

<ListBoxItem Content="Grocery" />

</ListBox>

</controls:PivotItem>

</controls:Pivot>

</Grid>

下图是运行结果。

提示:

如果要在这两个控件中实现纵向浏览,可以在其中填加滚动控件,比如ListBox,或者填加一个ScrollViewer。ScrllViewer可以确保元素尺寸始终都是跟容器搭配的。

最佳实践

以下是关于Panorama控件的建议:

尽量控制PanoramaItems的个数最大不超过四个。

除非PanoramaItems有内容显示,否则最好是把Visibility属性设置成Collapsed以隐藏。

通过设置Orientation属性为Horizontal使PanoramaItems可以显示比屏幕边界更宽的内容。

使用合适的背景图片大小,建议为高度800像素,宽度在2000像素以内。

尽量设置Panorama的Title属性为应用程序在开始界面的名称。

尽量避免为Panorama的Title填加动画或者动态更改其大小。

以下是关于Pivot控件的建议:

考虑到性能,尽量降低PivotItem的个数。

尽量实时加载里面的内容,而不是在程序开始的时候就全部加载。

尽量用Pivot控件显示相同类型的元素或者数据。

不要用Pivot控件实现类似导航工具的功能。

不要使用Application Bar提供导航。如果用Pivot是为了导航效果,那就相当于滥用了。

Panorama和Pivot控件的更多相关文章

  1. Windows Phone 如果你把Pivot控件当成主页面,那么这篇文章你值得看。

    原文:Windows Phone 如果你把Pivot控件当成主页面,那么这篇文章你值得看. 现在很多App都用到了Pivot视图 来当作 整个App主页面.如果你的Pivot视图主页面承载了大量数据的 ...

  2. 【高德地图API】Pivot控件中加载地图并禁止Pivot手势

    如题,解决方案,参考[Windows phone应用开发[20]-禁止Pivot手势]http://www.cnblogs.com/chenkai/p/3408658.html. xaml代码清单   ...

  3. 背水一战 Windows 10 (49) - 控件(集合类): Pivot, Hub

    [源码下载] 背水一战 Windows 10 (49) - 控件(集合类): Pivot, Hub 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类) Pivot Hub 示 ...

  4. 微软BI SSIS 2012 ETL 控件与案例精讲面试 200 问(SSIS 面试题,ETL 面试题)

    开篇介绍 本自测与面试题出自 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程,对于学完本课程的每一课时和阅读完相关辅助 ...

  5. 微软BI SSIS 2012 ETL 控件与案例精讲课程学习方式与面试准备详解

    开篇介绍 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院  ...

  6. WP8.1学习系列(第六章)——中心控件Hub面板部分交互UX

    本主题中呈现的模型类似于适用于 Windows Phone 的具有主页菜单(中心或透视控件)的中心应用中描述的模型.正如之前的案例所示,你要向用户呈现不同的功能区域.此处的区别在于你可以在顶层呈现所有 ...

  7. Windows UWP开发系列 – 控件默认样式

    今天用一个Pivot控件的时候,想修改一下它的Header样式,却发现用Blend和VS无法导出它的默认样式了,导致无法下手,不知道是不是Blend的bug. 在网上搜了一下,在MSDN上还是找到了它 ...

  8. SSIS 自测题-数据流控件类

    说明:以下是自己的理解答案,不是标准的答案,如有不妥烦请指出.         有些题目暂时没有答案,有知道的请留言,互相学习,一起进步. 133.请描述一下 Conditional Split 的使 ...

  9. WP8.1学习系列(第十二章)——全景控件Panorama开发指南

    2014/6/18 适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1 全景体验是本机 Windows ...

随机推荐

  1. sublime sftp 打开远程文件夹

    2014-04-29 13:19:09 总结: 本文介绍两种方法,推荐第二种方法(samba+windows映射) 先贴出sublime打开远程(Linux)目录所需的配置文件(sublime是通过s ...

  2. 《精通ASP.NET MVC5》第7章 SportStore:一个真正的应用程序(1)

    7.1 开始 7.1.1 解决方案 个工程. 1. 一个域模块工程. 2.一个MVC4应用. 3.一个单元测试工程.         现在我们就创建一个名为 SportsStore 的空 soluti ...

  3. Java编程的逻辑 (68) - 线程的基本协作机制 (下)

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  4. PHP 利用redis 做统计缓存mysql的压力

    <?php header("Content-Type:text/html;charset=utf-8"); include 'lib/mysql.class.php'; $m ...

  5. 【LOJ】 #2547. 「JSOI2018」防御网络

    题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N ...

  6. 黑马程序员_java基础笔记(14)...交通灯管理系统_编码思路及代码

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,面试题——交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ...

  7. 什么是新生代 GC 和老年代 GC

    GC 经常发生的区域是堆区,堆区还可以细分为新生代.老年代 jvm堆示意图 新生代 一个 Eden 区 两个 Survivor 区 老年代 默认 新生代(Young)与老年代(Old)的比例的值为 1 ...

  8. BeagleBone Black教程之BeagleBone Black使用到的Linux基础

    BeagleBone Black教程之BeagleBone Black使用到的Linux基础 BeagleBone Black涉及到的Linux基础 在许多没有Linux相关经验的人看来,Linux看 ...

  9. netbeans启动后一会崩溃处理

    由于netbeans 默认不支持amd cpu渲染,故需要修改默认配置文件,修改后netbeans没有问题. http://stackoverflow.com/questions/34560485/n ...

  10. 1722 最优乘车 1997年NOI全国竞赛

    题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...