对于Windows phone 7标准的800px * 480px 屏幕 中各种大小分析如下:
新建一个Windows phone 应用程序,默认状态下 shell:SystemTray.IsVisible="true" 表示显示系统托盘( 在Portrait视图下系统托盘占用高度为32px 在landscape视图状态下,系统托盘占用72px的宽度From MainPage)
为ContentPanel添加SizeChanged事件 ,并且添加一个TextBlock,其余使用默认,如下
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="TEST" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="size" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" SizeChanged="ContentPanel_SizeChanged">
<TextBlock Name="CenterTextBlock" FontSize="30" Text="Center_Center" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
</Grid>
</Grid>
为SizeChanged实现处理函数:
private void ContentPanel_SizeChanged(object sender, SizeChangedEventArgs e)
{
CenterTextBlock.Text = string.Format("ContentPanel Size:{0}\n"+
"TitlePanel Size:{1}\n"+
"LayoutRoot Size:{2}\n"+
"MainPage Size:{3}\n"+
"Fram Size:{4}",
e.NewSize, //获取ContentPanel大小
new Size(TitlePanel.ActualWidth,TitlePanel.ActualHeight), //TitlePanel
new Size(LayoutRoot.ActualWidth,ActualHeight), //LayoutRoot
new Size(this.ActualWidth,this.ActualHeight), //当前页面
Application.Current.RootVisual.RenderSize); //main application UI
}
这段代码是显示 页面中各种大小信息。
运行显示如图:

可以观察到 系统托盘是占有 32px的高度,名字为LayoutRoot的Grid的大小是和MainPage的大小一致的,但是垂直方向上LayoutRoot的垂直高度不等于 TitlePanel的高度和ContentPanel的高度的和 ,因为TitlePanel有45px的边距(17px在上面,28px在下面)
修改SupportedOrientations="PortraitOrLandscape" 切换到landscape视图如下

默认状态下 系统托盘是占有 72px的宽,名字为LayoutRoot的Grid的大小是和MainPage的大小一致的,但是垂直方向上LayoutRoot的垂直高度不等于 TitlePanel的高度和ContentPanel的高度的和,因为TitlePanel有45px的边距(17px在上面,28px在下面)
同时由于默认状态下 TitlePanel的左右边距分别为12px 和0px ,ContentPanel的左右边距分别为12px 和12px 故显示如图。
下面也是几个相似的图片

不显示系统托盘 shell:SystemTray.IsVisible="False"

不显示系统托盘 shell:SystemTray.IsVisible="False" 且为landscape视图

显示Application视图 很容易看出ApplicationBar的高度为72px