Windows Phone 7开发学习(四)--设备方向

最近几天忙公司另外一个项目,没有时间来整理windows phone的东西,今天补上。

上篇我们已经讨论了windows phone上的一个专用按钮---返回按钮。这篇我们将会把注意力放在英俊爱你的另一个方面:设备方向

Portrait vs. Landscape

尽管不太明显,portrait是设备的垂直放置方向,而landscape是水平放置方向。这些在任意的wp7程序上都是可以设置的,但是默认情况下,Silverlight程序开始于portrait,而XNA开始于landscape。(游戏一般都是需要更大的屏幕)。在这篇文章中,我们将会将注意力放在Silverlight上,以及我们如何处理用户在使用程序时将设配方向改变的情况。

你的默认工程将会是“portrai-only”

如果你看一下MainPage.xaml文件的头信息,你将会看到两个属性:

SupportedOrientations="Portrait" Orientation="Portrait"

将SupportedOrientations看成你的程序支持列表。你可以将它设置成以下属性值之一:

  • Portrait (the default)
  • Landscape
  • PortraitOrLandscape

Orientation值是你希望程序开始使用时的设定。他有很多值,但是记住如果要从landscape开始,你必须将landscape设置为选项。如下是orientation的起始值:

  • Landscape
  • LandscapeLeft (tip the phone left)
  • LandscapeRight (tip the phone right)
  • Portrait
  • PortraitDown (normal vertical position)
  • PortraitUp (tip the phone upside-down)

从上边你可以知道不仅可以设置使用landscape或是portrait启动,你还可以设置这些方向的定位。这将会允许你从你所喜欢的方向定位开始你的程序。

改变方向

有两种方式将布局改变。第一种是将SupportedOrientation设置为“PortraitOrLandscape”然后让系统帮助你来进行设置。许多情况下,这不被推荐,因为你的程序将有很大可能不能够自适应屏幕。第二种方式是通过具体的代码实现,这也正是我们将会说到的。

让我们使用一个垂直启动方向的程序进行示范。如下是例子:

imageimage (1)

你看到在landscape情况下,许多按钮都开始偏离屏幕。这是一个不好的用户体验。一种比较方便的方式是丢弃title,我确信我们的程序用户将会知道这是一个计算器,所以也许当他们在landscape模式下时,我们可以讲title去掉。我们可以同样重新排布我们的按钮,如果这些对你的程序有更大的帮助就做吧。本文的目的是展示如何修改程序,而不是指示你具体要修改什么。这是我使title小时并且修复问题的代码:

01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Net;
05 using System.Windows;
06 using System.Windows.Controls;
07 using System.Windows.Documents;
08 using System.Windows.Input;
09 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13   
14 namespace Day4_DeviceOrientation
15 {
16     public partial class MainPage : PhoneApplicationPage
17     {
18         // Constructor
19         public MainPage()
20         {
21             InitializeComponent();
22             this.OrientationChanged += new EventHandler<ORIENTATIONCHANGEDEVENTARGS>(MainPage_OrientationChanged);
23         }
24   
25         void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
26         {
27             if ((e.Orientation == PageOrientation.LandscapeRight)||(e.Orientation == PageOrientation.LandscapeLeft))
28             {
29                 TitlePanel.Visibility = Visibility.Collapsed;
30             }
31             else if ((e.Orientation == PageOrientation.PortraitDown) || (e.Orientation == PageOrientation.PortraitUp))
32             {
33                 TitlePanel.Visibility = Visibility.Visible;
34             }
35         }
36     }
37 }

因为我只是关注于程序是landscape还是portrait,我正在只是检测这两种状态。你当然可以自己根据需要设置不同的代码。

你注意到我为这个OrientationChanged创建了一个事件处理。这是识别发生时间的最简单方式,但是你还可以通过Accelerometer,这些将会在第十一天讲到。下面是代码运行以后的画面:

image (2)

原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-4-Device-Orientation.aspx

posted @ 2011-03-11 19:55  simba.liu  阅读(447)  评论(0编辑  收藏  举报