动画Storyboard

本文详细介绍了WPF中DoubleAnimation的应用,包括属性设置如AutoReverse、RepeatBehavior、Duration等,并通过实例展示了按钮缩放和平面图像旋转的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DoubleAnimation是“Double兼容类型(Double、Float、int等)值从**变为**”的动画,Storyboard.TargetName属性为动画作用的控件名,Storyboard.TargetProperty为作用的控件属性名,From为变化的起始值,To为变化的结束值。

DoubleAnimation其他属性,AutoReverse自动反向播放;

RepeatBehavior=“Forever”永远重复播放(在不需要的时候尽快停止,否则可能会导致计算机无法进入省电模式),如果想重复三次则设置为“3x”;

Duration:动画在From、To值之间变化时的持续时长

<pre name="code" class="html"><Page.Resources>
	<Storyboard x:Name="sb1">
		<DoubleAnimation Storyboard.TargetName="st1" Storyboard.TargetProperty="ScaleX" From="0" To="3" AutoReverse="True"></DoubleAnimation>
	</Storyboard>
	<Storyboard x:Name="sb2">
		<DoubleAnimation Storyboard.TargetName="pp1" Storyboard.TargetProperty="RotationY" From="0" To="360" Duration="00:00:03"></DoubleAnimation>
	</Storyboard>
</Page.Resources>
<Grid>
	<Button>
		<Button.RenderTransform>
			<ScaleTansform x:Name="st1"></ScaleTansform >
		</Button.RenderTransform>
		<Button.Projection>
			<ScaleTansform x:Name="pp1" RotationY="30"></ScaleTansform >
		</Button.Projection>
	</Button>
</Grid>

 

sb1.Begin();

除了DoubleAnimation之外,还有很多其他动画,这些动画都从TimeLine类继承,都有的属性:AutoReserve、RepeatBehavior、Duration、Completed事件(播放完成)、BeginTime(延迟播放,不是立即播放)。

指定EasingFunction属性可以设定动画的缓动曲线,BounceEase效果等。

图片翻转代码:

<pre name="code" class="html"><Page.Resources>
	<Storyboard x:Name="sbpp1">
		<DoubleAnimation Storyboard.TargetName="ppImg" Storyboard.TargetProperty="RotationX" From="0" To="90"></DoubleAnimation>
	</Storyboard>
	<Storyboard x:Name="sbpp2">
		<DoubleAnimation Storyboard.TargetName="ppImg" Storyboard.TargetProperty="RotationX" From="90" To="0"></DoubleAnimation>
	</Storyboard>
</Page.Resources>
<Grid>
	<Image Name="imgMM" Source="ms-appx:///Images/1.jpg">
		<Image.Projection>
			<PlaneProjection x:Name="ppImg"></PlaneProjection>
		</Image.Projection>
	</Image>
</Grid>

 

private void sbpp1_Completed(object sender, object e)
{
	imgMM.Source=new BitmapImage(new Uri("ms-appx:///Images/2.jpg"));
	sbpp2.Begin();
}
private void imgMM_Tapped(object sender, object e)
{
	sbpp1.Begin();
}



### 如何在 WPF 中使用 Storyboard 实现图片动画效果 为了实现在 Windows Presentation Foundation (WPF) 应用程序中展示带有动画效果的图像,可以利用 `Storyboard` 对象来控制各种类型的动画。下面是一个具体的例子说明如何通过 C# 和 XAML 结合的方式完成这一目标。 #### 创建并配置 Image 控件及其初始状态 首先,在XAML文件里定义一个用于显示图片的控件,并设置其默认属性: ```xml <Image Name="myImage" Source="/Resources/yourimage.png"> <!-- 可选:设定起始位置 --> </Image> ``` 如果希望给这个静态图加上淡入的效果,则可以在页面加载时将其透明度设为0;当触发事件发生后再逐渐变为完全不透明。 #### 定义 Storyboard 动画资源 接着在同一份XAML文档内声明所需的动画序列作为应用程序或窗口级别的资源: ```xml <Window.Resources> <Storyboard x:Key="FadeInAndMove"> <!-- 淡入动画 --> <DoubleAnimation Storyboard.TargetName="myImage" Storyboard.TargetProperty="(UIElement.Opacity)" From="0" To="1" Duration="0:0:2"/> <!-- 平移动画 --> <PointAnimationUsingPath Storyboard.TargetName="myImage" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X), (UIElement.RenderTransform).(TranslateTransform.Y)" PathGeometry="M 0,0 L 300,150 Z" Duration="0:0:4"/> </Storyboard> </Window.Resources> ``` 这里不仅包含了使图像变得可见的操作——即调整它的 Opacity 属性值由零升至一的过程[^1],还加入了沿指定路径平移变换的位置改变动作[^2]。 #### 绑定 EventTrigger 来启动 Storyboard 为了让上述动画能够在特定条件下自动播放,比如按钮点击之后立即执行,就需要借助于事件触发器(EventTriggers): ```xml <Window.Triggers> <EventTrigger RoutedEvent="Button.Click" SourceName="startAnimBtn"> <BeginStoryboard Storyboard="{StaticResource FadeInAndMove}"/> </EventTrigger> </Window.Triggers> <!-- 增加一个 Button 控件以便测试 --> <Button Content="Start Animation" Name="startAnimBtn"></Button> ``` 这段代码片段展示了怎样监听名为 "startAnimBtn" 的按钮上的 Click 事件,并在此基础上开启预先准备好的 `FadeInAndMove` 故事板实例[^3]。 #### 后端逻辑处理 最后,假如某些情况下需要从后台调用这些动画方法而不是仅仅依赖界面交互的话,也可以像这样编写相应的函数: ```csharp private void StartImageAnimation() { var fadeInStoryBoard = this.FindResource("FadeInAndMove") as Storyboard; if(fadeInStoryBoard != null){ fadeInStoryBoard.Begin(); } } ``` 此段C#代码实现了查找已注册的故事板资源并通过编程方式手动激活它[^4]的功能。 综上所述,就是关于如何运用 WPF 技术栈中的 Storyboards 特性去制作精美的图形化过渡特效的一个简单介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值