← Tutti gli articoli

Orientation detection in your Windows Phone 7

13 maggio 2011  · Windows Phone 7 · Article  ·  879 visite

How to detect in your application the orientation the device is currently in.


 
 
 
Prerequisites:
  • set the SupportedOrientations = PortraitOrLandscape
  • add the event OrientationChanged="PageOrientationChanged"
  1. <phone:PhoneApplicationPage   
  2.     x:Class="WindowsPhoneApplication2.MainPage"  
  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.     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"  
  10.     FontFamily="{StaticResource PhoneFontFamilyNormal}"  
  11.     FontSize="{StaticResource PhoneFontSizeNormal}"  
  12.     Foreground="{StaticResource PhoneForegroundBrush}"  
  13.     SupportedOrientations="PortraitOrLandscape" Orientation="None"  
  14.     OrientationChanged="PageOrientationChanged"  
  15.     shell:SystemTray.IsVisible="True">  
  16.   
  17.     <!--LayoutRoot is the root grid where all page content is placed-->  
  18.     <Grid x:Name="LayoutRoot" Background="Transparent">  
  19.         <Grid.RowDefinitions>  
  20.             <RowDefinition Height="Auto"/>  
  21.             <RowDefinition Height="*"/>  
  22.         </Grid.RowDefinitions>  
  23.   
  24.         <!--TitlePanel contains the name of the application and page title-->  
  25.         <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">  
  26.             <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>  
  27.             <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>  
  28.         </StackPanel>  
  29.   
  30.         <!--ContentPanel - place additional content here-->  
  31.         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">  
  32.             <TextBox Height="72" HorizontalAlignment="Left" Margin="35,143,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="460" />  
  33.         </Grid>  
  34.     </Grid>  
  35.    
  36.       
  37. </phone:PhoneApplicationPage>  
 
In your code behid:
 
 // Constructor
        public MainPage()
        {
            InitializeComponent();
            //this.SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
        }

        private void PageOrientationChanged(object sender, OrientationChangedEventArgs e)
        {
            base.OnOrientationChanged(e);
            var orientation = this.Orientation;
                switch (orientation){
                case PageOrientation.Portrait:
                case PageOrientation.PortraitUp:
                case PageOrientation.PortraitDown:
                    textBox1.Text="Portrait";
                break;
                case PageOrientation.Landscape:
                case PageOrientation.LandscapeLeft:
                case PageOrientation.LandscapeRight:
                textBox1.Text="Landscape";
                break;
            }
            
            
        }