WPF窗体动画显示和关闭
来源:互联网 发布:安卓7.0数据库编辑器 编辑:程序博客网 时间:2024/06/05 06:13
在WindowsForm中可以利用WindowsApi函数AnimateWindow(Inptr hwd,int dwTime,int dwFlags)实现窗体的动画显示和淡出,但是它的样式十分少,且效果不好,而WPF引入了动画以后,可以自定义很炫的动画,增强了程序的视觉效果,实现它的一般步骤为,设置窗体透明度等相关属性,为动画准备;设置窗体Content的变化属性;添加动画显资源;绑定动画触发事件;具体如下。
1、设置窗体透明度等相关属性
<Windows:................
Name="WDGoto"
WindowStyle="None" <!-- 无边框窗体,因为边框不支持动画-->
Background="Transparent" <!-- 背景透明,因为最后动画显示的是窗体的Content所以要把窗体背景设为透明,不然会影响效果-->
AllowsTransparency="True"> <!-- 作用同上-->
2、设置窗体Content RenderTransform变换属性
RenderTransform里设置的内容即是动画时要连续改变的量
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform CenterX="100" CenterY="50"></ScaleTransform>
<!--缩放中心为100,50。RenderTransform.Children[0]-->
<RotateTransform CenterX="100" CenterY="50"></RotateTransform>
<!--旋转中心为100,50。RenderTransform.Children[1]-->
</TransformGroup>
</Grid.RenderTransform>
这里船体的Content是一个Grid,是其它的亦可
3、添加动画资源
动画样式很多,这里只接受旋转显示和关闭两种
<Window.Resources>
<!--原始旋转出来样例-->
<Storyboard x:Key="showDW"> <!--故事板,即协同动画-->
<DoubleAnimation Storyboard.TargetName="grid1" <!--故事板目标元素,这里的窗体的Content对象Grid,如果是Canvas等其它的也可以,不过TargetName要一致-->
Storyboard.TargetProperty="Opacity" <!--透明度动画-->
From="0.2" To="1" Duration="0:0:2.5">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[1].Angle" <!--角度动画-->
From="-90" To="0" Duration="0:0:2" >
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" <!--X方向比例动画,下面一致,只是变大变小不同-->
From="0" To="1" Duration="0:0:2"
AccelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" <!--Y方向比例动画,下面一致,只是变大变小不同-->
From="0" To="1" Duration="0:0:2"
AccelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX"
To="0.98" BeginTime="0:0:2" Duration="0:0:0.05"
DecelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY"
To="0.98" BeginTime="0:0:2" Duration="0:0:0.05"
DecelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX"
To="1" BeginTime="0:0:2.05" Duration="0:0:0.2"
AccelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY"
To="1" BeginTime="0:0:2.05" Duration="0:0:0.2"
AccelerationRatio="1">
</DoubleAnimation>
</Storyboard>
<!--原始的旋转回去样例-->
<Storyboard x:Key="closeDW">
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[1].Angle"
To="360" Duration="0:0:1.5" >
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="Opacity"
To="0" Duration="0:0:3">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX"
To="0" Duration="0:0:1.5" AccelerationRatio="1">
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="grid1"
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY"
To="0" Duration="0:0:1.5" AccelerationRatio="1">
</DoubleAnimation>
</Storyboard>
</Window.Resources>
4、动画触发设置
<Window.Triggers>
<!--设置窗体的事件触发-->
<EventTrigger SourceName="WDGoto" RoutedEvent="Window.Loaded"><!--SourceName为触发源,这里与窗体名称一致,触发事件是Loaded事件-->
<BeginStoryboard Name="showQueryCanvasStoryboard2"
Storyboard="{StaticResource showDW}"> <!--绑定显示窗体动画-->
</BeginStoryboard>
</EventTrigger>
<EventTrigger SourceName="button1" RoutedEvent="Button.Click"> <!--这里设置了一个Button控件来关闭窗体,SourceName与其一致,触发事件是Click事件-->
<BeginStoryboard Name="closeQueryCanvasStoryboard"
Storyboard="{StaticResource closeDW}"> <!--绑定关闭窗体动画-->
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
XAML完整代码如下
CS完整代码如下
- WPF窗体动画显示和关闭
- WPF自学—模仿QQ窗体载入和关闭动画
- WPF中让窗体不显示最大化,最小化,关闭按钮
- Activity显示和关闭动画
- WPF窗体最大化、最小化、关闭按钮的隐藏和禁用
- WPF窗体全屏显示
- WPF窗体居中显示
- 窗体传值中的显示和关闭窗体
- WPF 作出窗体旋转动画
- WPF制作窗口的启动和关闭动画
- 实现动画显示和关闭窗口
- WinForm窗体在弹出和关闭时候的动画
- 动画显示窗体
- 动画显示窗体
- 动画显示窗体
- 动画显示窗体
- 动画显示窗体
- 动画显示窗体
- wince工业平板电脑实现GPRS无线上网方法
- 物理白痴的我
- input 子系统分析
- 每日一题(27) - 旋转数组的最小数字
- Jboss AS 7结合EclipseLink 配置每个项目单独的日志文件
- WPF窗体动画显示和关闭
- 往死里写
- Svn和Maven持续集成需要注意的问题
- macports could not set effective gid to 0
- JavaScript学习笔记——对象基础
- navicat for mysql 10.1.7注册码
- Hadoop streaming 使用 C 语言动态链接库
- Proe4.0使用VB.net生成缩略图方法
- 排序算法之AS3