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

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

全景体验是本机 Windows Phone 外观的一部分。与旨在适合手机屏幕边界的标准应用不同,全景应用通过使用超出屏幕边界的长水平画布提供了一个查看控件、数据和服务的独特方式。这些固有的动态视图使用分层动画和内容,以便各层以不同的速度流畅地平移,类似于视差效果。

本主题包括以下部分。

全景控件概述

在应用的底部是 Panorama 控件,该控件本质上是一个较长的水平画布。一个名为 PanoramaItem 的次要控件充当托管其他内容和控件(如链接、网格和列表)的容器。有关全景控件体系结构的详细信息,请参阅Windows Phone 8 的全景控件体系结构

全景应用的内容可能因以下内容而异:

  • 前后随意浏览,其中鼓励用户采用非任务定向的方式浏览内容。
  • 数据更密集的信息中心,用户可以在其中实现更有意识的目标,如查找特定联系人或要玩的游戏。

人脉中心和图片中心演示了全景应用的外观。

导航支持

Windows Phone 全景体验提供对触摸交互和导航的内置支持。因为默认情况下已经启用了手势功能,所以您不必在应用中实施任何特殊的手势功能。全景体验支持以下手势和导航效果:

  • 水平移动(点击并向左/向右拖动)
  • 水平轻拂(点击并向左/向右快速滑动)
  • 导航托管的控件 - 例如,可以点击链接,可以滚动列表

下图演示了当控件从左向右滚动时典型 Panorama 控件的响应方式。

全景一直向左滚动

全景在中心附近滚动

全景一直向右滚动

注意:

在上图中,当您位于特殊的内容部分中时,您将拥有在屏幕上可以看见的下一部分的 24 像素预览。这充当可提供其他内容的某个类型的可视提示。

全景应用功能

下表列出了在全景应用中所支持的一系列功能。


功能


描述


设计时体验


全景应用将提供添加了一个根 Panorama 控件和多个 PanoramaItem 控件的默认体验。您可以使用 Visual Studio 或 Blend for Visual Studio 中的设计图面执行诸如添加其他 PanoramaItem 控件和在项视图之间切换之类的操作。


匹配 Windows Phone 全景体验


您应用的外观和反应可能与集成的 Windows Phone 全景体验相似。


内置的轻拂和手势支持


全景应用已提供对常见导航的手势支持。您不必在您的应用中实现诸如拖动、轻拂或点击之类的手势。


在运行时隐藏和显示全景项


基于大量方案,可以通过将其 Visibility 属性设置为 Collapsed 来隐藏全景项。例如,在填充内容之前,您可以决定隐藏 PanoramaItem 控件。


在运行时添加和删除全景项


可以采用编程方式在全景控件中添加和删除 PanoramaItem 控件。

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

全景体验包括一个 Panorama 控件以及一个或多个 PanoramaItem 控件。Panorama 控件用作应用的基础,PanoramaItem 控件托管各个内容部分。 基于应用的要求,您可以将多个 PanoramaItem 控件添加到Panorama 控件表面,其中每一个都提供一种具有独特目的的功能。例如,一个 PanoramaItem 可能包含一系列链接和控件,而另一个则是缩略图图像的储存库。用户可以使用 Panorama 应用已提供的手势支持在这些部分之间来回平移。本主题详细介绍 Panorama 控件和 PanoramaItem 控件的体系结构以及具体分析。

本主题包括以下部分。

全景控件

Panorama 控件是用于全景应用的基础控件,包含三个不同的层。每个层都包含在用作 Panorama 控件的布局根的 Grid 控件中。



类型


描述


背景


PanningBackgroundLayer


用于显示背景和设置背景动画的面板。


标题


PanningTitleLayer


用于显示标题和设置标题动画的面板。



PanningLayer


显示 PanoramaItem 控件的层。

在任何层上执行拖动或平移将导致您应用中的所有三个层一起移动。

背景层

背景层是使用 Panorama 控件上的 Background 属性设置的。不应该将全景控件的 Background 设置为 null。如果设置为 null,则手势响应将不可靠。在默认模板中,Background 在默认情况下设置为Transparent

您可以应用以下画笔:

所有背景画笔都将被垂直拉伸以填充 Panorama 控件的高度。ImageBrush 将保留 ImageSource 的宽度,GradientBrush 将被拉伸以填充各项的宽度。

重要说明:

如果某个 Panorama 控件使用图像作为背景,则它的“生成操作”应该设置为“资源”;否则,当第一次显示应用时该控件不会立即显示。将“生成操作”设置为“内容”将导致它异步加载。

标题层

该层是全景应用的标题并且它是在 Panorama 控件的 Title 属性中设置的。无论内容大小是否过大还是缺少内容,该层使用的垂直高度都不变。 当您平移经过内容的边缘时,该层也不会重复自己。在选择在PanoramaItem 控件之间更改期间,该层采用动画的形式在之前移动的方向脱离视图并从屏幕的另一侧回到场景。

注意:

如果您从标题中删除文本,则填充将仍然留在该控件上。您可以修订模板标题以占用所需的任意空间。但是,这将不符合 Windows Phone 设计准则。

项层

项层是将包含 PanoramaItem 控件的层。这是用户在应用中主要交互的层。该层通过平移手势采用 1:1 的方式移动,因此从平移开始到手指抬起,手指下的内容保持不变。

PanoramaItem 控件

PanoramaItem 控件是添加到 Panorama 控件的内容的各个部分。Panorama 控件可以支持多个PanoramaItem 控件并且用户可以使用支持的触摸手势浏览这些部分。PanoramaItem 控件自身由两个元素组成。每个元素都包含在用作 PanoramaItem 控件的布局根的 Grid 中。


元素


类型


描述


标题


ContentControl


用于显示标题和设置标题动画的 ContentControl。此标题可选。如果未指定,则不应该为了节省空间而进行折叠。


内容


ContentPresenter


显示 PanoramaItem 内容的 ContentPresenter

可以在 XAML 代码中指定 PanoramaItem 控件的内容,也可以采用编程方式通过 Content 属性添加该控件的内容。

PanoramaItem 控件既支持水平方向,也支持垂直方向。下面是这些方向的特征:

  • PanoramaItem 控件的垂直方向在手势移动期间将只能对齐到屏幕的左侧。
  • PanoramaItem 控件的水平方向在手势移动期间将能够对齐到屏幕的左侧和右侧。
  • 将 PanoramaItem 控件设置为水平方向将允许在屏幕外放置内容,而不是裁剪内容。
  • 与垂直方向不同,水平方向将允许用户在内容中心平移,但不对齐到新的 PanoramaItem 控件视图

    如何为 Windows Phone 8 创建全景应用

    2014/6/18

    适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

    Visual Studio 中有多种方式可以在 Windows Phone 中创建全景体验。

    • 创建新项目时,可以使用名为“Windows Phone 全景应用”的自定义模板。该模板将预填充内容,您可以相应地修改该模板。
    • 在 Visual Studio 中,可以向工具箱中添加 Panorama 控件并将其拖放到您的项目中。
    • 您可以向现有的项目添加 Windows Phone 全景页面

    本主题将向您演示如何通过向现有的项目添加 Windows Phone 全景页面来创建全景应用。有关全景示例,请参见 Windows Phone 开发人员中心的示例库

    本主题包括以下部分。

    创建基本全景应用

    在本节中,您将在 Visual Studio 中创建一个全景应用并添加三个 PanoramaItem 控件。此过程将向您的项目中添加一个 Windows Phone 全景页面,该页面预填充一个 Panorama 控件和一些 PanoramaItem 控件。 您将另外添加一个 PanoramaItem 并对 Panorama 控件应用背景图像。

    创建基本全景应用

    1. 从“开始”菜单启动 Visual Studio。
    2. 通过选择“文件” | “新建项目”菜单命令来创建一个新项目。
    3. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Windows Phone”模板。
    4. 选择 Windows Phone 应用  模板。填写所需的项目“名称”。
    5. 单击“确定”。将创建一个新项目并在 Visual Studio 设计器窗口中打开 MainPage.xaml。
    6. 在“解决方案资源浏览器”中,右键单击该项目,单击“添加”,然后单击“新建项”。选择“Windows Phone 全景页面”,然后单击页面底部的“添加”。 对该项目使用默认名称 PanoramaPage1.xaml
    7. 在 MainPage.xaml 中,向名为 ContentPanel 的网格中的 XAML 代码中添加以下代码:

      XAML

      <HyperlinkButton Content="Panorama Application Example" Height="57"
      HorizontalAlignment="Left" Margin="49,116,0,0" Name="hyperlinkButton1"
      VerticalAlignment="Top" Width="383" NavigateUri="/PanoramaPage1.xaml"/>
      

      创建此超级链接的目的是为您的应用创建一个起点。在应用程序运行时,用户将点按此超级链接以前移到此全景体验。您不必使用超级链接作为全景应用的默认条目机制;超级链接仅用作本练习中使用的一个示例。可以将全景体验配置为当用户启动应用时立即可见。

    8. 在 PanoramaPage1.xaml 中,XAML 代码中的以下代码应该可见:

      XAML

         <!--LayoutRoot contains the root grid where all other page content is placed.-->
          <Grid x:Name="LayoutRoot">
              <controls:Panorama Title="my application">
      
                  <!--Panorama item one-->
                  <controls:PanoramaItem Header="item1">
                      <Grid/>
                  </controls:PanoramaItem>
      
                  <!--Panorama item two-->
                  <controls:PanoramaItem Header="item2">
                      <Grid/>
                  </controls:PanoramaItem>
              </controls:Panorama>
          </Grid>
      

      前面的代码将创建一个 Panorama 控件并为其分配一个标题。接下来,您将创建两个 PanoramaItem 控件,每个控件分配一个标头。对于此项目,我们将创建三个 PanoramaItem 控件,在下一步中将再创建一个PanoramaItem

    9. 在 <!--Panorama item two-- >部分后面,向以下代码中再添加一个 PanoramaItem 控件:

      XAML

      <!--Panorama item three.-->
             <controls:PanoramaItem Header="item3">
                 <Grid/>
            </controls:PanoramaItem>
      

    下图演示了基本的全景控件并且 PanoramaItem 控件应该出现在此阶段的练习中:

    设置背景图像

    在本节中,您将对 Panorama 控件应用图像。对于本主题,使用示例图像 samplePhoto.jpg。在应用中使用大小适当的图像。背景图像应当在 480 x 800 像素和 1024 x 800 像素(宽 x 高)之间,以确保较高的性能、最少的加载时间,以及不需要缩放处理。如果您的图像高度不为 800 像素,则将其拉伸到该高度,而不保持纵横比。

    设置背景图像

    • 向 Panorama 控件代码( <controls:Panorama Title="my application">)后面的 XAML 代码中添加以下代码:

      XAML

      <!--Assigns a background image to the Panorama control.-->
           <controls:Panorama.Background>
              <ImageBrush ImageSource="samplePhoto.jpg"/>
           </controls:Panorama.Background>
      

      或者,您也可以在代码隐藏文件或页面中采用编程方式更改控件的 Background。向代码隐藏文件添加System.Windows.Media.Imaging 命名空间的 using 指令。若要采用编程方式更改 Background,请向页面构造函数、一个 OnNavigatedTo 重写或者代码中要设置 Panorama 控件的 Background 的某个其他位置添加以下代码。该代码假定您拥有名为 Panorama 的控件 PanoControl。

      C#

      BitmapImage bitmapImage = new BitmapImage(new Uri(“samplePhoto.jpg”,UriKind.Relative));
      ImageBrush imageBrush = new ImageBrush();
      imageBrush.ImageSource = bitmapImage;
      PanoControl.Background = imageBrush;
      

    向 PanoramaItem 控件添加控件和内容

    在本节中,您将向每个 PanoramaItem 控件中添加各种控件和内容。您还将第二个 PanoramaItem 方向翻转为水平,这样便提供了此内容的唯一视角。例如,内容部分将扩展超出屏幕并且用户必须平移才能展示它的其余部分。

    向第一个 PanoramaItem 添加内容

    对于第一个 PanoramaItem,您将添加一对包含换行文本的 TextBlock 控件。 这两个控件都将放置在一个StackPanel 控件中。这是如何显示 PanoramaItem 控件中内容的一个简单演示。

    向第一个 PanoramaItem 中添加内容

    • 向第一个 PanoramaItem<controls:PanoramaItem Header="item1">)后面的 XAML 代码添加以下代码。您必须首先删除现有的 <Grid/> 标记。

      XAML

               <Grid>
               <!--This code creates two TextBlock controls and places them in a StackPanel control.-->
                  <StackPanel>
                      <TextBlock
                          Text="This is a text added to the first panorama item control"
                          Style="{StaticResource PhoneTextLargeStyle}"
                          TextWrapping="Wrap"/>
                      <TextBlock Text=" "/>
                      <TextBlock
                          Text="You can put any content you want here..."
                          Style="{StaticResource PhoneTextLargeStyle}"
                          TextWrapping="Wrap"/>
                  </StackPanel>
               </Grid>
      

      第一个 PanoramaItem 应该类似于本主题底部所示的插图。

    向第二个 PanoramaItem 添加内容

    在本节中,您将 PanoramaItem 控件的方向更改为水平。所得到的效果就是内容超出了屏幕并且用户必须水平平移才能展示其余内容。

    更改第二个 PanoramaItem 的方向

    向第二个 PanoramaItem 中添加内容

    • 向第二个 PanoramaItem<controls:PanoramaItem Header="item2" Orientation=”Horizontal”>)后面的 XAML 代码添加以下代码。您必须首先删除现有的 <Grid/> 标记。

      XAML

         <!--Assigns a border to the PanoramaItem control and background for the content section.-->
              <Grid>
                  <Border
                      BorderBrush="{StaticResource PhoneForegroundBrush}"
                      BorderThickness="{StaticResource PhoneBorderThickness}"
                      Background="#80808080">
      
                      <TextBlock
                          Text="This content is very wide and can be panned horizontally."
                          Style="{StaticResource PhoneTextExtraLargeStyle}"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center" >
                      </TextBlock>
      
                  </Border>
               </Grid>
      

      第二个 PanoramaItem 应该类似于本主题底部所示的插图。

    向第三个 PanoramaItem 添加内容

    对于最后一个 PanoramaItem,您将在 ListBox 控件内放置一系列字符串文本值。目的是表明您能够导航托管的控件。用户将能够上下垂直平移列表内容。

    向第三个 PanoramaItem 中添加内容

    1. 在 PanoramaPage1.xaml 中,在 XAML 代码中添加以下命名空间声明:

      XAML

      xmlns:sys="clr-namespace:System;assembly=mscorlib"
      
      注意:

      引用此程序集是向 ListBox 控件中添加多行字符串文本。

    2. 向第三个 PanoramaItem<controls:PanoramaItem Header="item3">)后面的 XAML 代码添加以下代码。您必须首先删除现有的 <Grid/> 标记。

      XAML

      <!--This code adds a series of string text values.-->
      <Grid>
                  <ListBox FontSize="{StaticResource PhoneFontSizeLarge}">
                      <sys:String>This</sys:String>
                      <sys:String>item</sys:String>
                      <sys:String>has</sys:String>
                      <sys:String>a</sys:String>
                      <sys:String>short</sys:String>
                      <sys:String>list</sys:String>
                      <sys:String>of</sys:String>
                      <sys:String>strings</sys:String>
                      <sys:String>that</sys:String>
                      <sys:String>you</sys:String>
                      <sys:String>can</sys:String>
                      <sys:String>scroll</sys:String>
                      <sys:String>up</sys:String>
                      <sys:String>and</sys:String>
                      <sys:String>down</sys:String>
                      <sys:String>and</sys:String>
                      <sys:String>back</sys:String>
                      <sys:String>again.</sys:String>
                  </ListBox>
      </Grid>
      

      第三个 PanoramaItem 应该类似于本主题底部所示的插图。

    3. 通过选择“调试” | “启动调试”菜单命令运行应用。这将打开模拟器窗口并启动该应用,或者部署到您选择的设备。

时间: 2024-10-09 21:25:26

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

WP8.1学习系列(第二十二章)——在页面之间导航

在本文中 先决条件 创建导航应用 Frame 和 Page 类 页面模板中的导航支持 在页面之间传递信息 缓存页面 摘要 后续步骤 相关主题 重要的 API Page Frame NavigationCacheMode 本主题将讨论基本的导航概念,并演示如何创建一个在两个页面之间进行导航的应用. 有关为你的应用选择最佳导航模式的帮助,请参阅导航模式. 在操作时请参阅平面导航和分层导航模式,它们是应用功能大全系列的一部分. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visual

WP8.1学习系列(第十九章)——事件和路由事件概述

我们将介绍在使用 C#.Visual Basic 或 Visual C++ 组件扩展 (C++/CX) 作为编程语言并使用 XAML 进行 UI 定义时,针对 Windows 运行时应用的事件的编程概念.你可以在 XAML 中的 UI 元素声明中为事件分配处理程序,或者在代码中添加处理程序.Windows 运行时支持路由事件:借助此功能,某些输入事件和数据事件可由引发该事件的对象以外的对象来处理.在定义控件模板或使用页面或版式容器时,路由事件十分有用. 事件即编程概念 通常而言,对 Window

WP8.1学习系列(第二十五章)——控件样式

XAML 框架提供许多自定义应用外观的方法.通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图 使用 C++ 的 Windows 运行时应用的路线图 应用功能大全系列中突出显示的 Windows 应用商店应用 UI 详细信息 本主题包含下列部分: 先决条件 样式基础知识 应用隐式或显式样式 使用基于样式 使用工具轻松处理样式 修改 Windo

WP8.1学习系列(第十六章)——交互UX之命令模式

命令模式 在本文中 命令类型 命令放置 相关主题 你可以在应用商店应用的几个曲面中放置命令和控件,包括应用画布.弹出窗口.对话框和应用栏.在正确的时间选择合适的曲面可能就是易于使用的应用和很难使用的应用之间的差别. 在应用商店应用中,命令是用户可用来执行操作的交互式 UI 元素.命令与导航元素不同,导航元素用于将用户转移到不同的页面,而命令则可让用户对当前页面执行操作.导航元素使应用可以使用.命令使应用有使用价值. 有关应用中不同命令图面的详细信息,请参阅布置你的 UI. 命令类型 筛选 筛选命

WP8.1学习系列(第二十四章)——Json解析

.net已经集成了json解析,类名叫DataContractJsonSerializer DataContractJsonSerializer 类型公开以下成员. 构造函数   名称 说明 DataContractJsonSerializer(Type) 初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象. DataContractJsonSerializer(Type, IEnumerable<Type>) 初始化 DataCont

WP8.1学习系列(第二十六章)——控件模板

在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果要自定义控件的可视结构和可视行为,请创建控件模板.控件有多个属性,如 Background.Foreground 以及FontFamily,可以设置这些属性以指定控件外观的多个方面.但是可以通过设置这些属性所做的更改有限.可以使用 ControlTemplate 类创建提供其他自定义的模板.在此处,

WP8.1学习系列(第十一章)——中心控件Hub开发指南

在本文中 先决条件 什么是中心控件? 添加中心控件 将分区添加到中心 添加交互式分区头用于导航 将展示磁贴添加到中心 使用窄应用中的垂直中心 借助中心使用语义式缩放视图 摘要和后续步骤 重要的 API Hub HubSection SemanticZoom 使用 Hub 控件创建一个进入应用的入口页.Hub 控件在丰富的平移视图中显示内容,这样用户一眼就能看见新鲜有趣的内容,从而吸引他们深入了解你的应用中的更多内容. 先决条件 查看并了解 Windows 导航模式. 查看并了解中心控件指南. 我

【WPF学习】第二十五章 日期控件

WPF包含两个日期控件:Calender和DatePicker.这两个控件都被设计为允许用户选择日期. Calendar控件显示日期,在与Windows操作系统中看到的日历(例如,当配置系统日期时看到的日历)相似.该控件每次显示一个月份,允许从一个月份跳到另一个月份(通过单击箭头按钮),或跳到某个特定的月份(通过单击月份的标题头查看一年中的月份,然后单击月份). DatePicker控件需要的空间更少.它模范简单的文本框,该文本框以长日期格式或短日期格式保存日期字符串.DatePicker控件提

quick-cocos2d-x 学习系列之十二 关于websocket

quick-cocos2d-x 学习系列之十二 关于websocket 1.  概念 百度百科:WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可