C# 转换到计算/绝对位置
我有一个覆盖整个屏幕的网格,我用故事板将它翻译到屏幕的顶部(或向下)。现在我想做同样的事情,但距离顶部48px。为此,我使用C# 转换到计算/绝对位置,c#,wpf,xaml,uwp,C#,Wpf,Xaml,Uwp,我有一个覆盖整个屏幕的网格,我用故事板将它翻译到屏幕的顶部(或向下)。现在我想做同样的事情,但距离顶部48px。为此,我使用SlideToPosition=-GridContent.ActualHeight+48计算SlideToPosition中的顶部位置。当屏幕大小为静态时,这是正常的 问题是在很多情况下,我必须重新计算这个职位: 应用程序大小调整 方向改变 手机屏幕菜单可见 当调整大小时,结果也是不稳定的,有时甚至是错误的。我还尝试使用ApplicationView.GetForCur
SlideToPosition=-GridContent.ActualHeight+48计算SlideToPosition
中的顶部位置代码>。当屏幕大小为静态时,这是正常的
问题是在很多情况下,我必须重新计算这个职位:
- 应用程序大小调整
- 方向改变
- 手机屏幕菜单可见
当调整大小时,结果也是不稳定的,有时甚至是错误的。我还尝试使用ApplicationView.GetForCurrentView().VisibleBounds.Top
,但对于不同的变量,这是相同的。有没有更好的方法来转换到这个位置,而不必一直重新计算变量
您的方法在这里似乎有点不合适,因为您基本上是将网格偏移到负位置,而不是调整网格的大小
如果你坚持这种方法,我建议如下:
当应用程序窗口处于“良好状态”(例如1280x720)时,测量其高度。
将栅格高度(48px)转换为百分比(48/720=0.0666)。
现在,每当您要计算顶部位置时,请执行以下操作:SlideToPosition=AppWindowHeight*0.666。如果您确实不想调整网格大小,只想将视图中的所有内容都剪裁掉,可以使用边距将其移动。
将其向上移出屏幕并显示48像素(heightToShow)
然后,当您想将其向后移动时,可以输入正常边距(topMargin)
我偏移了网格,因为我想要与解锁屏幕相同的效果,例如,将整个屏幕向上推。我希望48px在每个方向/情况下都能固定。您的解决方案给出的相对高度在(例如720)方向上仅为48px。在这种情况下,我建议您不要使用TranslateTransform。当使用从视图中隐藏的负位置时,它似乎不可靠。改为设置页边距的动画。
<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>
private void MoveGridUp(double heightToShow)
{
double gridHeight = GridContent.ActualHeight;
Thickness margin = GridContent.Margin;
margin.Top = heightToShow - gridHeight;
GridContent.Margin = margin;
}
private void MoveGridDown(double topMargin)
{
Thickness margin = GridContent.Margin;
margin.Top = topMargin;
GridContent.Margin = margin;
}