滑入&滑出动画

时间:2015-10-13 23:23:01

标签: c# wpf animation

我正试图在& c#& WPF。

到目前为止,我已设法编写下一行代码:

XAML:

<Grid Name="grid" Grid.Column="0" Grid.Row="1">
       <Border Name="border" Background="Red"></Border>
</Grid>

C#:

private void Button_Click(object sender, RoutedEventArgs e) {
            border.Height = grid.ActualHeight;
            if (!isOpen) {
                isOpen = true;
                DoubleAnimation db = new DoubleAnimation();
                db.From = 0;
                db.To = grid.ActualHeight;
                db.Duration = TimeSpan.FromSeconds(0.5);
                border.BeginAnimation(Grid.HeightProperty, db);
            } else {
                isOpen = false;
                DoubleAnimation db = new DoubleAnimation();
                db.From = grid.ActualHeight;
                db.To = 0;
                db.Duration = TimeSpan.FromSeconds(0.5);
                border.BeginAnimation(Grid.HeightProperty, db);
            }
        }

好处是动画被执行了。坏的是这个动画有错误的效果,我的意思是动画从上到中,从下到中(如果它正在缩小)......

如何制作(或修改我的实际代码)幻灯片效果(从上到下和从下到上)?

必须是c#代码。

1 个答案:

答案 0 :(得分:5)

您正在尝试翻译您的UI控件,因此请使用TranslateTransform(如果您在画布上,Canvas.Top是可能的,但效率低下。)

修改您的XAML以将渲染变换集包含到TranslateTransform对象:

<Grid Name="grid" Grid.Column="0" Grid.Row="1" ClipToBounds="true">
    <Border Name="border" Background="Red">
       <Border.RenderTransform>
           <TranslateTransform x:Name="borderTransform"/>
       </Border.RenderTransform>
    </Border>
</Grid>

为变换的Y属性设置动画:

DoubleAnimation db = new DoubleAnimation();
db.From = 0;
db.To = grid.ActualHeight;
db.Duration = TimeSpan.FromSeconds(0.5);
borderTransform.BeginAnimation(TranslateTransform.YProperty, db);

您知道,使用Storyboard对象执行此操作是一个整个批次清洁工具(另外您可以在XAML中进行设置!)