我正试图在& 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#代码。
答案 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中进行设置!)