将“边框”滑到屏幕上

本文关键字:屏幕 边框 | 更新日期: 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);
// ...