原文:WPF动画应用-几何图形扩散动画

最终效果图:

本实例中用到了DoubleAnimationStoryboard两个类。

如果想系统学习的话可以直接点击链接看官方文档。

源码:

首先,在页面上画一个大饼,要用黄灿灿的颜色,然后给他起个名字。

<UserControl x:Class="MyStyle.MapPolygon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyStyle"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Name="MainGrid" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse Name="CenterEllipse"
Width="180"
Height="180"
Stroke="Yellow"
StrokeThickness="1">
</Ellipse>
</Grid>
</UserControl>

后台代码一共五步:
第一步:新建一个故事板(可以设置是否循环播放,播放速度,开始时间等)

第二步:新建你想要的动作(某一个值,从多少到多少)

第三步:新建一个控件(新建一个你喜欢的东西)

第四步:把动作赋值给控件(把你写的动作赋值给你写的控件,然后你写的动作就可以改你写的控件的某个值了)

第五步:Action(动画启动,WPF按照你写的一堆动作按你设置的速度修改你写的控件的某些值)

    public partial class MapPolygon : UserControl
{
/// <summary>
/// 总圆环数量
/// </summary>
public int EllipseNum { get; set; }
/// <summary>
/// 不同圆之间的时间间隔
/// </summary>
public double EllipseInterval { get; set; }
/// <summary>
/// 动画启动等待时间
/// </summary>
private double StoryBeginTime { get; set; }
/// <summary>
/// 动画持续时间
/// </summary>
public double AnimationDuration { get; set; }
/// <summary>
/// 圆的最大尺寸
/// </summary>
public double MaxSize { get; set; } public MapPolygon()
{
InitializeComponent();
EllipseNum = ;
MaxSize = ;
EllipseInterval = ;
AnimationDuration = ;
InitAnimation1();
} private void InitAnimation1()
{
for (int i = ; i <= EllipseNum; i++)
{
//5-故事板-可以理解为动画集合,就是用来存放各种动作的
Storyboard story = new Storyboard()
{
//是否循环
RepeatBehavior = RepeatBehavior.Forever,
//动画刷新速度
SpeedRatio =
};
//4-透明度调整动作
DoubleAnimation myOpacityAnimation = new DoubleAnimation
{
From = ,
To = ,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myOpacityAnimation);
//宽度调整动作
DoubleAnimation myWidthSizeChangeAnimation = new DoubleAnimation
{
From = CenterEllipse.Width,
To = MaxSize,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myWidthSizeChangeAnimation);
//高度调整动作
DoubleAnimation myHeightSizeChangeAnimation = new DoubleAnimation
{
From = CenterEllipse.Width,
To = MaxSize,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myHeightSizeChangeAnimation);
//3-生成一个几何形状
Ellipse tempE = new Ellipse()
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Width = CenterEllipse.Width,
Height = CenterEllipse.Width,
Stroke = CenterEllipse.Stroke,
};
//2-将之前写的动画赋值给几何图形
Storyboard.SetTarget(myOpacityAnimation, tempE);
Storyboard.SetTargetProperty(myOpacityAnimation, new PropertyPath(Ellipse.OpacityProperty)); Storyboard.SetTarget(myWidthSizeChangeAnimation, tempE);
Storyboard.SetTarget(myHeightSizeChangeAnimation, tempE);
Storyboard.SetTargetProperty(myWidthSizeChangeAnimation, new PropertyPath(Ellipse.WidthProperty));
Storyboard.SetTargetProperty(myHeightSizeChangeAnimation, new PropertyPath(Ellipse.HeightProperty));
//几何图形放到页面上
MainGrid.Children.Add(tempE);
//1-每一个故事板之间的时间间隔
StoryBeginTime += EllipseInterval;
story.BeginTime = TimeSpan.FromMilliseconds(StoryBeginTime);
//Action
story.Begin();
}
}
}

以上是该控件的全部代码,直接复制就好,不懂的看注释,然后自己改体会下,然后你就学会了

WPF动画应用-几何图形扩散动画的更多相关文章

  1. WPF学习之绘图和动画

    如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是 ...

  2. WPF学习之绘图和动画--DarrenF

    Blend作为专门的设计工具让WPF如虎添翼,即能够帮助不了解编程的设计师快速上手,又能够帮助资深开发者快速建立图形或者动画的原型. 1.1   WPF绘图 与传统的.net开发使用GDI+进行绘图不 ...

  3. WPF学习(12)动画

    本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...

  4. 《深入浅出WPF》笔记——绘画与动画

    <深入浅出WPF>笔记——绘画与动画   本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...

  5. 纯css3圆形从中心向四周扩散动画效果

    查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...

  6. WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化

    不知道为什么,WPF的MeaageBox的风格还停留在Win 2000的风格... 很久前就想自己封装一个MessageBox出来,但是都只是简单的封装,不怎么具有通用性.这次终于搞完了. 使用方法和 ...

  7. 一步步用svg做一个声波扩散动画

    有个项目需要在某个坐标显示一个声波扩散(不知道这个表达对不对)的动画. 这种需求一般做法有几种,一种做成gif图片,然后贴上去,一种是用html+css3完成,要么就是画上去,这画又分两种,一种是Ca ...

  8. WPF圆形环绕的Loading动画

    原文:WPF圆形环绕的Loading动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/ ...

  9. WPF编游戏系列 之七 动画效果(2)

    原文:WPF编游戏系列 之七 动画效果(2)        上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...

随机推荐

  1. js 高亮显示关键字

    示例: var defaultEmphasisHandler = function(keyword, data){ var regex = RegExp("("+keyword.r ...

  2. java验证码识别

    首先参考了csdn大佬的文章,但是写的不全ImgUtils类没有给出代码,无法进行了 写不完整就是制造垃圾 不过这个大佬又说这个大佬的文章值得参考于是又查看这篇文章 有案例https://blog.c ...

  3. Birt设置导出格式和去掉多余按钮的方法

    1.设置导出格式: webcontent>birt>pages>dialog>ExportReportDialogFragment.jsp页面: 找到for ( int i = ...

  4. git diff 笔记

    有一个 lab1 一个lab2 lab2 是比lab1 新的版本 但是Lab1 中有一些写的新代码,想要保留到lab2 中 直接使用patch 会把 lab2 回退到lab1 或lab1 更新到lab ...

  5. 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file

    通过Pycharm工具新建一个xlsx文件. 再通过openpyxl模块读取该表时,报错: zipfile.BadZipFile: File is not a zip file 如下所示: 解决办法: ...

  6. go语言第一问:在其他地方执行编译go语言程序,结果会在哪个地方产生?

    1.我们看执行编译go语言程序中命令,没有找到exe文件.

  7. js 常用事件总结

    无论web端还是手机端,用户的交互总伴随着事件监听 下面是我总结的一些常用到的事件 1.监听标签内容变化 非input元素 $(dom).bind('DOMNodeInserted',function ...

  8. 计算机网络5.2-5 ipv4&路由协议&ipv6

    子网变址技术 子网掩码 默认子网掩码 子网地址 广播地址 一些计算 CIDR 分配举例 地址不必连续分配 sadsdas 网络设备---路由器 输出结构 直接交付与简介交付 IP分组的转发 分属于不同 ...

  9. Linux用户程序配置文件

    在 Linux(和一般的 UNIX)中,有无数的“用户”程序.最常见的一种用户程序配置文件是 /etc/lynx.cfg.这是著名的文本浏览器 lynx 的配置文件.通过这个文件,您可以定义代理服务器 ...

  10. Leetcode4.Median of Two Sorted Arrays两个排序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 你可以假设 nums1 和 nums2 不同 ...