将“边框”滑到屏幕上
本文关键字:屏幕 边框 | 更新日期: 2023-09-27 18:22:35
我需要从屏幕底部滑动到视图中,但是我在获取边界控件的ActualHeight
时遇到问题。因为这是动画代码,所以我把它放在代码后面,因为它是Views的责任。
我的边界有它的Loaded
事件与此相关:
private void NotifcationWindow_Loaded(object sender, RoutedEventArgs e)
{
SlideFromBottom(sender);
}
Sender
是Border对象,因此SlideFromBottom
方法应该能够使用该对象并获得其高度,因为它已经被渲染。
public void SlideFromBottom(object sender)
{
//The Notification container
Border notification = (sender as Border);
//The screen size
var workingArea = SystemParameters.WorkArea;
Storyboard sb = new Storyboard();
var animation = new DoubleAnimation()
{
BeginTime = TimeSpan.FromSeconds(0),
Duration = TimeSpan.FromSeconds(5),
// Get the height and turn it to a negative value, and add screen height.
From = (notification.ActualHeight * -1),
//Slide the border into view
To = notification.ActualHeight
};
Storyboard.SetTarget(animation, notification);
Storyboard.SetTargetProperty(animation, new PropertyPath("(Margin.Bottom)"));
sb.Begin();
}
我没有收到任何错误,但动画没有播放,我有什么问题吗?边框与底部垂直对齐,因此负边距应将其从屏幕上删除。
你没有看到任何东西的原因是你没有将动画添加到故事板中:
sb.Children.Add(animation);
然后还有更多的问题。这样就不能单独设置边缘的一部分动画。你需要一个ThicknessAnimation
。
但有一个更简单的解决方案。使用RenderTransform
。如果您为边界提供以下渲染变换:
<Border>
<Border.RenderTransform>
<TranslateTransform/>
</Border.RenderTransform>
</Border>
,然后可以按如下方式设置动画:
// ...
var animation = new DoubleAnimation()
{
BeginTime = TimeSpan.FromSeconds(0),
Duration = TimeSpan.FromSeconds(5),
From = notification.ActualHeight,
To = 0
};
Storyboard.SetTarget(animation, notification);
Storyboard.SetTargetProperty(animation, new PropertyPath("RenderTransform.Y"));
sb.Children.Add(animation);
// ...