2016-11-17 56 views
5

我有一個覆蓋整個屏幕的網格,我將它翻譯成屏幕的頂部(或倒退)與故事板。現在我想要做同樣的事情,但距離頂端距離爲48px。要做到這一點,我計算SlideToPositionSlideToPosition = -GridContent.ActualHeight + 48;的頂部位置。當屏幕尺寸是靜態時,這是可以的。轉換爲計算/絕對位置

的問題是,有很多的情況下,在這裏我必須重新計算這個位置:

  • 應用調整
  • 方向改變
  • 移動屏幕上的菜單中看到

調整大小時有時會出現結果抖動,有時甚至是錯誤的。我也嘗試過使用ApplicationView.GetForCurrentView().VisibleBounds.Top,但這與其他變量是一樣的。有沒有更好的方法來轉換到這個位置,而不必一直重新計算一個變量?

enter image description here

<Grid Name="GridContent"> 
    <Grid Name="GridTranslate"> 
     <Grid.RenderTransform> 
      <TranslateTransform x:Name="TranslateTransformContent" /> 
     </Grid.RenderTransform> 
    </Grid> 
</Grid> 

<Storyboard x:Name="StoryboardUp"> 
    <DoubleAnimation Storyboard.TargetName="TranslateTransformContent" Storyboard.TargetProperty="Y" To="{x:Bind Path=SlideToPosition, Mode=OneWay}" Duration="0:0:0.4"> 
</Storyboard> 

<Storyboard x:Name="StoryboardDown"> 
    <DoubleAnimation Storyboard.TargetName="TranslateTransformContent" Storyboard.TargetProperty="Y" To="0" Duration="0:0:0.4"> 
</Storyboard> 

回答

0

你的做法似乎有點過了這裏,因爲你基本上抵消了網格爲負的位置,而不是調整其大小。

如果你堅持這種做法,比我建議如下:

措施,當它處於「良好狀態」您的應用程序窗口的高度(如1280×720)。 將網格高度(48px)轉換爲百分比(48/720 = 0.0666)。 現在每次你想要計算頂部位置時:SlideToPosition = AppWindowHeight * 0.666。

+0

我偏移了網格,因爲我想要的效果與例如您將整個屏幕向上推動的解鎖屏幕相同。我希望48px能夠在每個方向/情況下得到解決。你的解決方案給我的相對高度只有48px(例如720)。 –

+0

我會建議你不要在這種情況下使用TranslateTransform。使用隱藏在視圖中的負位置似乎是不可靠的。改變邊界的動畫效果。 –