如图,一个 Rectangle 一个 Button ,点击按钮时要通过动画完成对 Rectangle填充色的渐变动画.

Xaml:

 1 <Window
2 x:Class="WpfApp1.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
7 Title="MainWindow"
8 Width="400"
9 Height="250"
10 mc:Ignorable="d">
11 <Grid>
12 <Grid.RowDefinitions>
13 <RowDefinition />
14 <RowDefinition />
15 </Grid.RowDefinitions>
16
17 <!-- 注意这里通过 x:Name 为 Rectangle 对象注册了名称 -->
18 <!-- Rectangle 继承于 Shape. -->
19 <!-- Fill 是 Shape 的依赖属性,类型是 Brush. 这里为其指定了一个 SolidColorBrush 类型的笔刷,其 Color 属性为 Aqua -->
20 <!-- 接下来要在后台的C#代码中对这个 SolidColorBrush 的 Color 属性应用动画 -->
21 <Rectangle
22 x:Name="TheRectangle"
23 Width="150"
24 Height="50"
25 Fill="Aqua" />
26
27 <Button
28 Grid.Row="1"
29 Width="150"
30 Height="50"
31 Click="ButtonBase_OnClick">
32 开始动画
33 </Button>
34 </Grid>
35 </Window>

C#

 1 using System;
2 using System.Windows;
3 using System.Windows.Media;
4 using System.Windows.Media.Animation;
5 using System.Windows.Shapes;
6
7 namespace WpfApp1
8 {
9 /// <summary>
10 /// MainWindow.xaml 的交互逻辑
11 /// </summary>
12 public partial class MainWindow
13 {
14 public MainWindow()
15 {
16 InitializeComponent();
17 }
18
19 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
20 {
21 //创建颜色动画对象.
22 var colorAnimation = new ColorAnimation(
23 Colors.Aqua, //颜色起始值
24 Colors.BlueViolet, //颜色中值值
25 new Duration(new TimeSpan(0, 0, 2)) //动画持续时间,2秒
26 );
27
28 //创建属性链.
29 //动画的目标属性是一个 Shape.Fill 属性的 Color 子属性.
30 var propertyChain = new[]
31 {
32 Shape.FillProperty,
33 SolidColorBrush.ColorProperty
34 };
35
36 //通过属性链创建 PropertyPath 对象.
37 var propertyPath = new PropertyPath("(0).(1)", propertyChain);
38
39 //通过 PropertyPath 对象指定动画的目标属性.
40 Storyboard.SetTargetProperty(colorAnimation, propertyPath);
41
42 //指定动画的目标对象
43 Storyboard.SetTargetName(colorAnimation, "TheRectangle");
44
45 //创建故事版,将动画包含其中,并启动动画
46 var storyboard = new Storyboard();
47 storyboard.Children.Add(colorAnimation);
48 storyboard.Begin(this);
49 }
50 }
51 }

知识来源:https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/graphics-multimedia/storyboards-overview#indirect-targeting

wpf 中用 C# 代码创建 PropertyPath ,以对间接目标进行 Storyboard 动画.的更多相关文章

  1. [WPF]如何使用代码创建DataTemplate(或者ControlTemplate)

    1. 前言 上一篇文章([UWP]如何使用代码创建DataTemplate(或者ControlTemplate))介绍了在UWP上的情况,这篇文章再稍微介绍在WPF上如何实现. 2. 使用Framew ...

  2. iOS开发 纯代码创建UICollectionView

    转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xi ...

  3. WPF使用后台C#代码创建Grid

    笔者刚刚接触WPF,菜鸟一枚,在做一个练手程序时遇到这样一个需求,创建一个新的Grid并将其添加至一个ListView中,要求Grid及其子元素应按一定顺序给Name属性赋值,直接使用XAML创建的话 ...

  4. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  5. WPF/WP/Silverlight/Metro App代码创建动画的思路

    在2010年之前,我都是用Blend创建动画,添加触发器实现自动动画,后来写成代码创建的方式.如今Blend已经集成到Visual Studio安装镜像中了,最新的VS2015安装,Blend的操作界 ...

  6. C# WPF 中用代码模拟鼠标和键盘的操作

    原文:C# WPF 中用代码模拟鼠标和键盘的操作 原文地址 C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的.但是可惜的是,在WPF中不能使用这个方法了. 我们知道,在 ...

  7. 通过中看不中用的代码分析Ioc容器,依赖注入....

    /** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...

  8. 在Entity Framework 中用 Code First 创建新的数据库

    在Entity Framework 中用 Code First 创建新的数据库 (原文链接) 本文将逐步介绍怎样用Code First 创建新数据库,使用在代码中定义类和API中提供的特性(Attri ...

  9. Prism 4 文档 ---第10章 Silverlight和WPF之间共享代码

        本主题帮助你理解来自Prism的多目标和它的优缺点.多目标的代码针对两个不同的平台有大致相同的代码库.这允许同时保持代码尽可能多一样能够产生针对两种不同技术的二进制文件.在这种情况下,本节介绍 ...

随机推荐

  1. 我的第一次shell

    我的第一次shell 最近我们的项目需要进行优化,整体架构进行改造. 然后我们红超哥就看我骨骼惊奇,说小伙子你想不想当做掌门人呀.(我说不想哈哈) 想不想也没用了,红超哥说我们现在的架构有所改变,需要 ...

  2. uniapp发布到微信小程序整改摘要

    uniapp作为跨端的利器,可同时发布到安卓.ios.微信小程序.支付宝小程序.百度小程序.头条小程序.QQ小程序等8个平台. 如果是轻量级的应用,不涉及太多功能的话,或许可以直接打包移植,但涉及前后 ...

  3. Emlog整站搬家教程

    之前使用的服务器空间到期,不想再续费,所以就打算更换服务器,购买新的服务器之后不知道怎么把EM程序转移到新的服务器上面,所以东查查西查查,终于找到了一个既简单又方便的搬家方法,分享给大家.步骤开始:1 ...

  4. Day11 python高级特性-- 迭代器 Iterator

    直接可以作用于for循环的数据类型有以下几种:   •  集合数据类型:        list.tuple.dict.set.str   •  Generator:        生成器 和 带 y ...

  5. Vue 组件化开发的思想体现

    现实中的组件化思想化思想体现 标准(同一的标准) 分治(多人同时开发) 重用(重复利用) 组合(可以组合使用) 编程中的组件化思想 组件化规范:Web Components 我们希望尽可能多的重用代码 ...

  6. react第X单元(redux)

    第X单元(redux) #课程目标 理解redux解决的问题,理解redux的工作原理 熟练掌握redux的api 熟练掌握redux和react组件之间的通信(react-redux) 把redux ...

  7. 全栈工程师-史上最强VSCODE插件-提高开发效率

    当你点进来的时候 ,你可能是被标题吸引进来的,也有可能是 偶然间,看到的,首先恭喜你,已经准备好向全栈开发工程师靠近 ,那我们不说废话,直接开始,咱们先从安装步骤开始讲起 ,因为有些人连插件在哪都不知 ...

  8. 教你用python爬取抖音app视频

    记录一下如何用python爬取app数据,本文以爬取抖音视频app为例. 编程工具:pycharm app抓包工具:mitmproxy app自动化工具:appium 运行环境:windows10 思 ...

  9. String 和 StringBuffer,StringBuilder 的区别

    String 和 StringBuffer,StringBuilder 的区别 String 是 " 字符串常量" , 对象一旦创建就不可改变,这就导致如果字符串常量池中没有所需对 ...

  10. .Net Core 审计日志实现

    前言: 近日在项目协同开发过程中出现了问题,数据出现了异常:其他人员怀疑项目数据丢失程序存在问题.于是通过排查程序提供的审计日志最终还原了当时操作及原因. 可见审计日志在排查.定位问题是相当有用的,那 ...