以下是Windows Phone 8应用程序的一个非常基本的布局。我有一个PivotControl
PivotItem
。 PivotControl
的标题以红色标出,而PivotItem
标有绿色。我将Canvas
占用PivotItem
的100%所以我需要能够相应地计算它的尺寸(因为高度/宽度将决定其他控件的大小和位置)
现在我可以用这个来计算PivotItem
的宽度,其中margin
是所有四边的边距数量(左边和右边乘以2):
double width = Application.Current.Host.Content.ActualWidth - (margin * 2);
高度更难,因为我需要获取总屏幕高度并减去StatusBar高度和标题高度(图像中的红色矩形)。
有谁知道如何获得PivotItem
的高度?有没有比试图像我一样计算它的方法更简单?目前,Height
和ActualHeight
属性均为0.0。
答案 0 :(得分:1)
默认的高度和宽度将根据手机的分辨率而变化。以下是根据Blend的轴项目模板大小。
WVGA(480x800):456 x 603
WXGA(480x1280):456 x 603
720p(720x1280):456 x 656
答案 1 :(得分:1)
如果我理解正确,你有一个Canvas占据整个PivotItem?像这样:
<phone:Pivot>
<phone:Pivot.Items>
<phone:PivotItem Header="menu">
<Canvas x:Name="Canvas" />
</phone:PivotItem>
<phone:PivotItem Header="game" />
</phone:Pivot.Items>
</phone:Pivot>
如果是这样,检索画布的高度非常简单:
Debug.WriteLine(this.Canvas.ActualHeight);
注意:ActualHeight
事件之前不会填充Loaded
属性。因此,如果您尝试从构造函数或OnNavigatedTo
方法中读取它,则该属性将等于0.
完整的XAML代码:
<phone:PhoneApplicationPage
x:Class="WP7ForumTest.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="Portrait" Orientation="Portrait"
Loaded="Page_Loaded">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<phone:Pivot>
<phone:Pivot.Items>
<phone:PivotItem Header="menu">
<Canvas x:Name="Canvas" />
</phone:PivotItem>
<phone:PivotItem Header="game" />
</phone:Pivot.Items>
</phone:Pivot>
</Grid>
</phone:PhoneApplicationPage>
代码隐藏:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.Canvas.ActualHeight.ToString());
}