Windows Phone開發(6):處理螢幕方向的改變

來源:互聯網
上載者:User

俺們都知道,智能手機可以通過旋轉手機來改變螢幕的顯示方向,更多的時候,對於螢幕方向的改變,我們要做出相應的處理,例如,當手機螢幕方向從縱向變為橫向時,可能要重新排列頁面上的控制項以適應顯示地區的變化。

前面我們討論過,Silverlight for Windows Phone的頁面配置有三個常用的布局控制項,那麼,當螢幕方向改變後,我們所做的對布局的更改基礎上是基於這幾個容器進行的操作。本文我將通過三個樣本來分別說明。開始之前,先說一下PhoneApplicationPage類的OrientationChanged事件,該事件就是當螢幕的方向改變之後發生,我們從事件參數OrientationChangedEventArgs類的執行個體的Orientation屬性中擷取當前螢幕的方向,即改變後的方向,比如,原來螢幕是縱向,現在我把手機螢幕改為橫向,則Orientation屬性擷取到的方向就是橫向的,呵呵,當然也包括從哪個方向旋轉過來的,這裡只是舉例而已。

要使頁面支援旋轉,要把PhoneApplicationPage的SupportedOrientations屬性改為PortraitOrLandscape,然後可以通過定義OrientationChanged事件來處理布局。形如:

<phone:PhoneApplicationPage     ..............    SupportedOrientations="PortraitOrLandscape"     Orientation="Portrait"    OrientationChanged="PhoneApplicationPage_OrientationChanged">
一、Grid控制項的處理。
<phone:PhoneApplicationPage     x:Class="Sample_PageDir.Page1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}"    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"    shell:SystemTray.IsVisible="True"    SupportedOrientations="PortraitOrLandscape"     Orientation="Portrait"    OrientationChanged="PhoneApplicationPage_OrientationChanged">    <Grid x:Name="layoutRoot">        <Grid.RowDefinitions>            <RowDefinition Height="Auto" />            <RowDefinition Height="Auto" />        </Grid.RowDefinitions>        <Grid.ColumnDefinitions>            <ColumnDefinition Width="Auto" />            <ColumnDefinition Width="Auto" />        </Grid.ColumnDefinitions>        <Image x:Name="img" Source="http://gubapic.eastmoney.com/member/e68/e681999/e68199920091216131540.jpg" Stretch="UniformToFill" Width="270" Grid.Row="0" Grid.Column="0" />        <TextBlock x:Name="txtBlock"            Grid.Row="1"            Grid.Column="0"            FontSize="70"            Margin="28">            <Run Foreground="Coral">信春哥</Run>            <LineBreak/>            <Run Foreground="Yellow">唱情歌</Run>            <LineBreak/>            <Run Foreground="SkyBlue">不掛科</Run>        </TextBlock>    </Grid></phone:PhoneApplicationPage>

頁面主要有兩個控制項,一個用於顯示圖片,一個用於顯示文本資訊,通過事件處理代碼來相應改變兩個控制項的布局。

        private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)        {            // 如果是橫向的            if (e.Orientation == PageOrientation.Landscape ||                e.Orientation == PageOrientation.LandscapeLeft ||                e.Orientation == PageOrientation.LandscapeRight)            {                Grid.SetColumn(this.img, 0);                Grid.SetRow(this.img, 0);                Grid.SetRow(this.txtBlock, 0);                Grid.SetColumn(this.txtBlock, 1);            }            // 如果是縱向            else if (e.Orientation == PageOrientation.Portrait ||                e.Orientation == PageOrientation.PortraitDown ||                e.Orientation == PageOrientation.PortraitUp)            {                Grid.SetColumn(this.img, 0);                Grid.SetRow(this.img, 0);                Grid.SetRow(this.txtBlock, 1);                Grid.SetColumn(this.txtBlock, 0);            }            else            {                Grid.SetColumn(this.img, 0);                Grid.SetRow(this.img, 0);                Grid.SetRow(this.txtBlock, 1);                Grid.SetColumn(this.txtBlock, 0);            }        }

按F5運行程式,預設的螢幕方向是縱向的,如所示:

 

好,現在,我們把旋轉螢幕一下,看看會怎麼樣。

 

 

 二、StackPanel控制項的處理。
<phone:PhoneApplicationPage     x:Class="Sample_PageDir.Page2"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}"    SupportedOrientations="PortraitOrLandscape"    OrientationChanged="PhoneApplicationPage_OrientationChanged"    Orientation="Portrait"    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"    shell:SystemTray.IsVisible="True">    <phone:PhoneApplicationPage.Resources>        <Style TargetType="TextBlock">            <Setter Property="FontSize" Value="46"/>        </Style>    </phone:PhoneApplicationPage.Resources>        <StackPanel x:Name="pl">        <TextBlock Text="文本一"/>        <TextBlock Text="文本二"/>        <TextBlock Text="文本三"/>    </StackPanel></phone:PhoneApplicationPage>

後台事件處理代碼。

 

        private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)        {            if (e.Orientation == PageOrientation.Landscape ||                e.Orientation == PageOrientation.LandscapeLeft ||                e.Orientation == PageOrientation.LandscapeRight)            {                this.pl.Orientation = System.Windows.Controls.Orientation.Horizontal;            }            else            {                this.pl.Orientation = System.Windows.Controls.Orientation.Vertical;            }        }

運行,預設方向是縱向。

 

 

把旋轉螢幕後。

 

 

三、Canvas控制項的處理。
<phone:PhoneApplicationPage     x:Class="Sample_PageDir.Page3"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}"    SupportedOrientations="PortraitOrLandscape"    Orientation="Portrait"    OrientationChanged="PhoneApplicationPage_OrientationChanged"    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"    shell:SystemTray.IsVisible="True">    <Canvas x:Name="cv">        <Rectangle x:Name="rect1"            Width="232"            Height="238"            Fill="Red"            Canvas.Left="88"            Canvas.Top="88"/>        <Rectangle x:Name="rect2"            Height="192"            Width="275"            Fill="Yellow"            Canvas.Top="268"            Canvas.Left="155"/>    </Canvas></phone:PhoneApplicationPage>

後台代碼。後台代碼。

 

        private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)        {            if (e.Orientation== PageOrientation.Landscape||e.Orientation== PageOrientation.LandscapeLeft||e.Orientation== PageOrientation.LandscapeRight)            {                Canvas.SetTop(this.rect1, 37);                Canvas.SetLeft(this.rect1, 46);                Canvas.SetTop(this.rect2, 240);                Canvas.SetLeft(this.rect2, 462);            }            else            {                Canvas.SetTop(this.rect1, 88);                Canvas.SetLeft(this.rect1, 88);                Canvas.SetTop(this.rect2, 268);                Canvas.SetLeft(this.rect2, 155);            }        }

看看效果。看看效果。

 

縱向。

 

 

橫向。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.