Windows Phone 7 学习流程攻略(二)

今天介绍,本教程的第二章。

第二章 手机方向

一,Silverlight和自动布局

在xaml中可以通过,SupportedOrientations来设置程序中支持的手机方向。

在切换手机方向后,Silverlight会自动根据xaml中的设置重新布局,所以在设计时要考虑屏幕方向改变后程序的切换效果。

书中利用TextBlock中的VerticalAlignment和HorizontalAlignment进行了布局演示。

--------------------

Tips:

1. VerticalAlignment可设置为Top,Center,Bottom。

    HorizontalAlignment可设置为Left,Center,Right。

2. Margin属性的类型是Thickness。在xaml中Thickness可以有一个参数(四个方向全都是这个数值),两个参数(左右方向为第一个参数,上下方向为第二个参数),四个参数(不用说了,代表左上右下)

3. 可以在控件添加SizeChanged属性事件,于cs文件中实现该控件大小改变时需要做的工作。

4. 在xaml中以命名的标签可以,在cs中调用。命名方式有两种x:Name和Name,书中解释属性x:Name是xmal文件标签的命名方式,而属性Name是继承FrameworkElement的,因此不是所有标签都可以用Name命名。(后面会看见各种TransForm都不是继承FrameworkElement的,因此只能用x:Name命名)

5. 可以在xaml中修改属性shell:SystemTray.IsVisible来显示或隐藏任务栏。如果用户不需要知道事件,而你需要32个像素的空间时,大可以隐去任务栏。

-----------------------

 

二,方向改变事件

Silverlight中,可以在cs文件中重载PhoneApplicationPage的OnOrientationChanged函数来截获屏幕方向发生变化的事件。(当然是在SupportedOrientations允许屏幕方向改变的前提下)参数中的Orientation属性是新的屏幕方向。

 

三,XNA中的方向设置

XNA中默认的是Landscape方向,不过在Game1()构造函数构造了graphics之后,可以通过设置他的SupportedOrientations属性来声明允许的屏幕方向。

---------------------

Tips:

1. 设置许可方向的方法在Game1(),构造graphics对象后调用

graphics.SupportedOrientations = DisplayOrientation.Portrait |
                                              DisplayOrientation.LandscapeLeft |
                                              DisplayOrientation.LandscapeRight;

2. 在屏幕方向是Portrait的时候屏幕的默认大小是240*240,这时可以设置graphics的PreferedBackBufferWidth和PreferedBackBufferHeight来调整屏幕缓冲大小。

3. graphics.IsFullScreen可以用来设置是否全屏。

4. 由于XNA中没有提供屏幕方向改变时响应的事件,因此只能在Update函数中实时刷this.GraphicsDevice.Viewport来计算此时屏幕大小,改变XNA内容,刷新画图。

5. 还可以通过this.Window.ClientBounds得到工作区域的矩形。

--------------------

 

四,一个简单的时钟实现

这段介绍了如何分别用Silverlight和XNA来实现一个时钟。

 

Silverlight比较简单利用System.Windows.Threading的DispatcherTimer建立一个对象。设置步长DispatcherTimer.Interval,添加DispatcherTimer.Tick事件的回调委托,DispatcherTimer.Start开始。

然后按事件回调一刷界面就可以了。

这里着重介绍了Silverlight的刷新方法,不是全屏刷,而是只刷改变的控件。

 

XNA通过对在Update函数中对时间差的对比来判断是否超过一秒钟,如果超过一秒就刷新文字内容,否则调用SuppressDraw();来取消这次执行完Update后,需要执行的Draw函数。

-------------------

Tips:

1. 还是由于垃圾回收影响效率的问题,需要在Update中做字符操作的时候,在声明字符串的时候用StringBuilder类代替String类型。

2. 在Update函数中调用SuppressDraw函数可以取消这次Update后应该执行的Draw函数。这是一个可以减少耗电的好把戏。

-------------------

 

下一章介绍触摸。

posted @ 2011-03-15 00:24  摇滚诗人  阅读(370)  评论(0编辑  收藏  举报