【问题标题】:Translating to a calculated / absolute position转换为计算/绝对位置
【发布时间】:2017-04-01 00:18:27
【问题描述】:

我有一个覆盖整个屏幕的网格,我用情节提要将它翻译到屏幕顶部(或向后)。现在我想做同样的事情,但距离顶部 48px。为此,我用SlideToPosition = -GridContent.ActualHeight + 48; 计算SlideToPosition 中的最高位置。当屏幕尺寸为静态时,这是可以的。

问题是有很多情况,我必须重新计算这个位置:

  • 应用调整大小
  • 方向改变
  • 移动屏幕菜单可见

调整大小时结果也很紧张,有时甚至是错误的。我也尝试使用ApplicationView.GetForCurrentView().VisibleBounds.Top,但这与不同的变量相同。有没有更好的方法来转换到这个位置,而不必一直重新计算变量?

<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>

【问题讨论】:

    标签: c# wpf xaml uwp


    【解决方案1】:

    您的方法在这里似乎有点偏离,因为您基本上是将网格偏移到负位置而不是调整它的大小。

    如果你坚持这种方法,我建议如下:

    测量处于“良好状态”(例如 1280x720)的应用程序窗口的高度。 将网格高度 (48px) 转换为百分比 (48 / 720 = 0.0666)。 现在每次要计算顶部位置时,请执行以下操作:SlideToPosition = AppWindowHeight * 0.666。

    【讨论】:

    • 我偏移了网格,因为我想要与解锁屏幕相同的效果,例如你将整个屏幕向上推。我希望 48px 在每个方向/情况下都能得到修复。您的解决方案给了我一个相对高度,在(例如 720)方向上只有 48px。
    • 我建议您不要在这种情况下使用 TranslateTransform。当使用隐藏在视图中的负位置时,它似乎不可靠。而是为边距设置动画。
    【解决方案2】:

    如果您真的不想调整网格大小而只是将所有内容从视图中剪掉,您可以使用边距来移动它。 将其向上移出屏幕并显示 48 像素 (heightToShow)

    private void MoveGridUp(double heightToShow)
        {
            double gridHeight = GridContent.ActualHeight;
            Thickness margin = GridContent.Margin;
            margin.Top = heightToShow - gridHeight;
            GridContent.Margin = margin;
        }
    

    然后当你想往回移动时你可以输入正常的边距(topMargin)

    private void MoveGridDown(double topMargin)
        {
            Thickness margin = GridContent.Margin;
            margin.Top = topMargin;
            GridContent.Margin = margin;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多