2016-11-17 45 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。使用隐藏在视图中的负位置似乎是不可靠的。改变边界的动画效果。 –