俺们都知道,智能手机可以通过旋转手机来改变屏幕的显示方向,更多的时候,对于屏幕方向的改变,我们要做出相应的处理,例如,当手机屏幕方向从纵向变为横向时,可能要重新排列页面上的控件以适应显示区域的变化。

前面我们讨论过,Silverlight for Windows Phone的页面布局有三个常用的布局控件,那么,当屏幕方向改变后,我们所做的对布局的更改基础上是基于这几个容器进行的操作。
本文我将通过三个示例来分别说明。
开始之前,先说一下PhoneApplicationPage类的OrientationChanged事件,该事件就是当屏幕的方向改变之后发生,我们从事件参数OrientationChangedEventArgs类的实例的Orientation属性中获取当前屏幕的方向,即改变后的方向,比如,原来屏幕是纵向,现在我把手机屏幕改为横向,则Orientation属性获取到的方向就是横向的,呵呵,当然也包括从哪个方向旋转过来的,这里只是举例而已。

要使页面支持旋转,要把PhoneApplicationPage的SupportedOrientations属性改为PortraitOrLandscape,然后可以通过定义OrientationChanged事件来处理布局。形如:

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. ..............
  3. SupportedOrientations="PortraitOrLandscape"
  4. Orientation="Portrait"
  5. OrientationChanged="PhoneApplicationPage_OrientationChanged">

一、Grid控件的处理。

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. x:Class="Sample_PageDir.Page1"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  6. xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  9. FontFamily="{StaticResource PhoneFontFamilyNormal}"
  10. FontSize="{StaticResource PhoneFontSizeNormal}"
  11. Foreground="{StaticResource PhoneForegroundBrush}"
  12. mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
  13. shell:SystemTray.IsVisible="True"
  14. SupportedOrientations="PortraitOrLandscape"
  15. Orientation="Portrait"
  16. OrientationChanged="PhoneApplicationPage_OrientationChanged">
  17. <Grid x:Name="layoutRoot">
  18. <Grid.RowDefinitions>
  19. <RowDefinition Height="Auto" />
  20. <RowDefinition Height="Auto" />
  21. </Grid.RowDefinitions>
  22. <Grid.ColumnDefinitions>
  23. <ColumnDefinition Width="Auto" />
  24. <ColumnDefinition Width="Auto" />
  25. </Grid.ColumnDefinitions>
  26. <Image x:Name="img" Source="http://gubapic.eastmoney.com/member/e68/e681999/e68199920091216131540.jpg" Stretch="UniformToFill" Width="270" Grid.Row="0" Grid.Column="0" />
  27. <TextBlock x:Name="txtBlock"
  28. Grid.Row="1"
  29. Grid.Column="0"
  30. FontSize="70"
  31. Margin="28">
  32. <Run Foreground="Coral">信春哥</Run>
  33. <LineBreak/>
  34. <Run Foreground="Yellow">唱情歌</Run>
  35. <LineBreak/>
  36. <Run Foreground="SkyBlue">不挂科</Run>
  37. </TextBlock>
  38. </Grid>
  39. </phone:PhoneApplicationPage>

页面主要有两个控件,一个用于显示图片,一个用于显示文本信息,通过事件处理代码来相应改变两个控件的布局。

[csharp] view plaincopyprint?
  1. private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
  2. {
  3. // 如果是横向的
  4. if (e.Orientation == PageOrientation.Landscape ||
  5. e.Orientation == PageOrientation.LandscapeLeft ||
  6. e.Orientation == PageOrientation.LandscapeRight)
  7. {
  8. Grid.SetColumn(this.img, 0);
  9. Grid.SetRow(this.img, 0);
  10. Grid.SetRow(this.txtBlock, 0);
  11. Grid.SetColumn(this.txtBlock, 1);
  12. }
  13. // 如果是纵向
  14. else if (e.Orientation == PageOrientation.Portrait ||
  15. e.Orientation == PageOrientation.PortraitDown ||
  16. e.Orientation == PageOrientation.PortraitUp)
  17. {
  18. Grid.SetColumn(this.img, 0);
  19. Grid.SetRow(this.img, 0);
  20. Grid.SetRow(this.txtBlock, 1);
  21. Grid.SetColumn(this.txtBlock, 0);
  22. }
  23. else
  24. {
  25. Grid.SetColumn(this.img, 0);
  26. Grid.SetRow(this.img, 0);
  27. Grid.SetRow(this.txtBlock, 1);
  28. Grid.SetColumn(this.txtBlock, 0);
  29. }
  30. }

按F5运行程序,默认的屏幕方向是纵向的,如下图所示:

好,现在,我们把屏幕旋转一下,看看会怎么样。

二、StackPanel控件的处理。

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. x:Class="Sample_PageDir.Page2"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  6. xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  9. FontFamily="{StaticResource PhoneFontFamilyNormal}"
  10. FontSize="{StaticResource PhoneFontSizeNormal}"
  11. Foreground="{StaticResource PhoneForegroundBrush}"
  12. SupportedOrientations="PortraitOrLandscape"
  13. OrientationChanged="PhoneApplicationPage_OrientationChanged"
  14. Orientation="Portrait"
  15. mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
  16. shell:SystemTray.IsVisible="True">
  17. <phone:PhoneApplicationPage.Resources>
  18. <Style TargetType="TextBlock">
  19. <Setter Property="FontSize" Value="46"/>
  20. </Style>
  21. </phone:PhoneApplicationPage.Resources>
  22. <StackPanel x:Name="pl">
  23. <TextBlock Text="文本一"/>
  24. <TextBlock Text="文本二"/>
  25. <TextBlock Text="文本三"/>
  26. </StackPanel>
  27. </phone:PhoneApplicationPage>

后台事件处理代码。

[csharp] view plaincopyprint?
  1. private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
  2. {
  3. if (e.Orientation == PageOrientation.Landscape ||
  4. e.Orientation == PageOrientation.LandscapeLeft ||
  5. e.Orientation == PageOrientation.LandscapeRight)
  6. {
  7. this.pl.Orientation = System.Windows.Controls.Orientation.Horizontal;
  8. }
  9. else
  10. {
  11. this.pl.Orientation = System.Windows.Controls.Orientation.Vertical;
  12. }
  13. }

运行,默认方向是纵向。

把屏幕旋转后。

三、Canvas控件的处理。

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. x:Class="Sample_PageDir.Page3"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  6. xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  9. FontFamily="{StaticResource PhoneFontFamilyNormal}"
  10. FontSize="{StaticResource PhoneFontSizeNormal}"
  11. Foreground="{StaticResource PhoneForegroundBrush}"
  12. SupportedOrientations="PortraitOrLandscape"
  13. Orientation="Portrait"
  14. OrientationChanged="PhoneApplicationPage_OrientationChanged"
  15. mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
  16. shell:SystemTray.IsVisible="True">
  17. <Canvas x:Name="cv">
  18. <Rectangle x:Name="rect1"
  19. Width="232"
  20. Height="238"
  21. Fill="Red"
  22. Canvas.Left="88"
  23. Canvas.Top="88"/>
  24. <Rectangle x:Name="rect2"
  25. Height="192"
  26. Width="275"
  27. Fill="Yellow"
  28. Canvas.Top="268"
  29. Canvas.Left="155"/>
  30. </Canvas>
  31. </phone:PhoneApplicationPage>

后台代码。后台代码。

[csharp] view plaincopyprint?
  1. private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
  2. {
  3. if (e.Orientation== PageOrientation.Landscape||e.Orientation== PageOrientation.LandscapeLeft||e.Orientation== PageOrientation.LandscapeRight)
  4. {
  5. Canvas.SetTop(this.rect1, 37);
  6. Canvas.SetLeft(this.rect1, 46);
  7. Canvas.SetTop(this.rect2, 240);
  8. Canvas.SetLeft(this.rect2, 462);
  9. }
  10. else
  11. {
  12. Canvas.SetTop(this.rect1, 88);
  13. Canvas.SetLeft(this.rect1, 88);
  14. Canvas.SetTop(this.rect2, 268);
  15. Canvas.SetLeft(this.rect2, 155);
  16. }
  17. }

看看效果。看看效果。

纵向。

横向。

转载于:https://www.cnblogs.com/songtzu/archive/2012/07/24/2607176.html

Windows Phone开发(6):处理屏幕方向的改变 转:http://blog.csdn.net/tcjiaan/article/details/7273107...相关推荐

  1. Windows Phone开发(30):图形 转:http://blog.csdn.net/tcjiaan/article/details/7453028

    图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下面的XAML代码. [html] view plai ...

  2. Windows Phone开发(28):隔离存储B 转:http://blog.csdn.net/tcjiaan/article/details/7436959...

    上一节我们聊了目录的操作,这一节我们继续来看看如何读写文件. 首先说一下题外话,许多朋友都在摇摆不定,三心二意,其实这样的学习态度是很不好的,如果你对Windows phone开发有兴趣,如果你真想学 ...

  3. Windows Phone开发(39):漫谈关键帧动画上篇 转:http://blog.csdn.net/tcjiaan/article/details/7550506...

    尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By ...

  4. Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...

    吹完了页面有关的话题,今天我们来聊一下页面之间是如何导航的,在更多情况下,我们的应用程序不会只有一个页面的,应该会有N个,就像我们做桌面应 用开发那样,我们一个应用程序中可能不止一个窗体(极简单的程序 ...

  5. Windows Phone开发(13):如何规范用户的输入行为 转:http://blog.csdn.net/tcjiaan/article/details/7341513...

    很多时候,我们对用户的操作或输入做一定程度的限制,以避免发生不必要的异常或错误,因此,对一些特殊的类型,进行输入限制是很有必要的. 通改变屏幕键盘的显示模式可以规范和告诉用户, 这里应该输入什么. 要 ...

  6. Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...

    不知道大家有没有"谈Socket色变"的经历?就像我一位朋友所说的,Socket这家伙啊,不得已而用之.哈,Socket真的那么恐怖吗? 其实这话一点也不假,Socket有时候真的 ...

  7. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  8. Windows Phone开发(27):隔离存储A 转:http://blog.csdn.net/tcjiaan/article/details/7425212...

    在很多资料或书籍上都翻译为"独立存储",不过,我想了一下,决定将IsolatedStorage翻译为"隔离存储",我想这样会更方便大家对这一概念的理解. 关于何 ...

  9. Windows Phone开发(32):路径之PathGeometry 转:http://blog.csdn.net/tcjiaan/article/details/7469512...

    说起路径这玩意儿,其实说的就是Path类,它藏在命名空间System.Windows.Shapes下,应该好找,它有一个很重要的属性Data,你不妨在"对象浏览器"中把它抓出来看看 ...

  10. Windows Phone开发(29):隔离存储C 转:http://blog.csdn.net/tcjiaan/article/details/7447469...

    本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东--用户设置. 当然了,可能翻译为应用程序设置合适一些,不过没关系,只要大家明白,它就是用于保存我们的应用程序的设置 ...

最新文章

  1. AlphaCode能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了...
  2. Maven pom.xml 全配置(二)不常用配置
  3. JS-for的衍生对象
  4. day21 面向对象之继承和组合
  5. redhat怎样修改语言_硕士博士个人陈述(PS)辅导及修改服务带你极速前进!
  6. win10开移动热点让手机使用上网
  7. 大型网站技术架构(读书笔记)
  8. 22.分布式系统基础设施
  9. 重复可记,证明没有忘记这回事
  10. 软件需求分析课堂讨论一
  11. XML 教程(一文彻底搞懂XML)
  12. Windows系统口令扫描之——使用NTScan扫描Windows口令
  13. MySQL高级查询语句(一)排序、运算符、别名、子查询、内外连接
  14. 动态博弈--gyy参考总结
  15. 华为微认证华为云计算服务实践稳过 笔记资料
  16. 关于android的广告词,关于android:随心译无广告的专属实时翻译神器
  17. 大一python简答题_Python练习题及参考答案
  18. 2023-spring 2.探险营地 — 字符串
  19. Halcon图像预处理-感兴趣区域(ROI)
  20. 谷歌宣布Android设备累计激活量突破10亿台

热门文章

  1. 如何阻止事件冒泡和默认事件
  2. .NET:OrderBy和ThenBy
  3. 利用whistle调试移动端页面
  4. [原创] 数据库小工具 (BatchESQL.exe)
  5. 搭建appium的android环境
  6. Wince 设备环境和画笔应用
  7. saltstack安装使用
  8. 游戏开发--开源软件13--libgdx(Android)||Angle(android 2D...
  9. mysql主从同步开启后的iptables的设定问题
  10. Web 设计师的 50 个超便利工具[下]