2012-11-13 169 views
2

以下是Windows Phone 8應用程序的一個非常基本的佈局。我有一個PivotControlPivotItemPivotControl的標題顯示爲紅色,而PivotItem顯示爲綠色。我將有一個Canvas佔據PivotItem的100%,因此我需要能夠相應地計算它的尺寸(因爲該高度/寬度將決定其他控件的尺寸和位置)。計算PivotItem的高度?

所以現在我可以計算出我PivotItem本,其中margin是保證金的四面量(左乘以2,右)的寬度:

double width = Application.Current.Host.Content.ActualWidth - (margin * 2); 

高度更困難,因爲我需要採取總屏幕高度並減去StatusBar高度和標題高度(我的圖像中的紅色矩形)。

有誰知道我怎麼能得到我的PivotItem的高度?有沒有比嘗試像我這樣計算它更簡單的方法?現在HeightActualHeight屬性都是0.0。

enter image description here

回答

1

如果我理解正確的話,你有一個帆布佔據整個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()); 
} 
+0

太棒了,謝謝。這可能會起作用,但我更喜歡在Loaded事件之前計算高度,因爲當頁面加載時,有些事情取決於高度/寬度。也許我正在討論這個錯誤 - 我今晚會再看一遍,看看我能否讓這個解決方案起作用。 – lhan

+0

@ lhan16我非常懷疑有一種方法可以在'Loaded'事件之前動態獲取元素的大小。如果這是一個問題,你必須像Lance建議的那樣對值進行硬編碼,或者使用不同的容器,比如'Grid',它可以讓你用百分比而不是像素值來定位元素。 –

+0

這是有道理的。謝謝。 – lhan

1

默認高度和寬度將根據手機的分辨率更改。以下是根據Blend的數據透視表模板大小。

WVGA(480×800):456 X 603

WXGA(480x1280):456 X 603

支持720p(720x1280):456 X 656

+0

謝謝。今晚我會試試這個。但是,我真的更喜歡一種實際計算這些值的方法,這樣我就不必爲每個分辨率對它們進行硬編碼。 – lhan