我有一个覆盖整个屏幕的网格,我用故事板将其翻译到屏幕的顶部(或向后)。现在我想做同样但距离顶部48px的距离。为此,我使用SlideToPosition
计算SlideToPosition = -GridContent.ActualHeight + 48;
中的最高排名。当屏幕尺寸是静态时,这是可以的。
问题是有很多情况,我必须重新计算这个位置:
- app resizing
- 方向更改
- 可见的移动屏幕菜单
在调整大小时,结果也是紧张的,有时候也是错误的。我也尝试使用
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>
答案 0 :(得分:0)
您的方法似乎有点偏离,因为您基本上将网格偏移到负位置而不是调整大小。
如果你坚持这种方法而不是我建议如下:
当应用程序窗口高度处于良好状态时测量它的高度&#34; (例如1280x720)。 将网格高度(48px)转换为百分比(48/720 = 0.0666)。 现在每次想要计算顶部位置时:SlideToPosition = AppWindowHeight * 0.666。
答案 1 :(得分:0)
如果您确实不想调整网格的大小,而只是将所有内容裁剪到视图之外,则可以使用边距来移动网格。 将其上下移动并显示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;
}