Windows Phone開發(fā)(6):處理屏幕方向的改變
俺們都知道,智能手機(jī)可以通過(guò)旋轉(zhuǎn)手機(jī)來(lái)改變屏幕的顯示方向,更多的時(shí)候,對(duì)于屏幕方向的改變,我們要做出相應(yīng)的處理,例如,當(dāng)手機(jī)屏幕方向從縱向變?yōu)闄M向時(shí),可能要重新排列頁(yè)面上的控件以適應(yīng)顯示區(qū)域的變化。
要使頁(yè)面支持旋轉(zhuǎn),要把PhoneApplicationPage的SupportedOrientations屬性改為PortraitOrLandscape,然后可以通過(guò)定義OrientationChanged事件來(lái)處理布局。形如:
- <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>
頁(yè)面主要有兩個(gè)控件,一個(gè)用于顯示圖片,一個(gè)用于顯示文本信息,通過(guò)事件處理代碼來(lái)相應(yīng)改變兩個(gè)控件的布局。
- 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運(yùn)行程序,默認(rèn)的屏幕方向是縱向的,如下圖所示:
好,現(xiàn)在,我們把屏幕旋轉(zhuǎn)一下,看看會(huì)怎么樣。
別走開,下頁(yè)更精彩
#p#
二、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>
后臺(tái)事件處理代碼。
- 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;
- }
- }
運(yùn)行,默認(rèn)方向是縱向。
把屏幕旋轉(zhuǎn)后。
三、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>
后臺(tái)代碼。后臺(tái)代碼。
- 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);
- }
- }
看看效果??纯葱Ч?。
縱向。
橫向。