WPF动画

  • 在 WPF(Windows Presentation Foundation)中,主要有两种类型的动画:属性动画(Property Animation)和关键帧动画(Key - Frame Animation)。属性动画用于简单地从一个起始值平滑地过渡到一个结束值,例如改变一个控件的宽度从 100px 到 200px。关键帧动画则更加灵活,它允许你在动画过程中定义多个关键帧,每个关键帧可以有不同的值,这样可以创建更复杂的动画效果,比如一个物体先加速再减速的运动动画。
  • WPF动画主要使用Storyboard来设置动画。Storyboard是一种用于控制时间和多个动画的容器,允许你在时间轴上定义动画的开始、持续时间、暂停等。
  • 主要的动画类型包括:

  • 位移动画(DoubleAnimation):用于改变对象的位置。
  • 透明度动画(DoubleAnimation):用于改变对象的透明度。
  • 缩放动画(ScaleTransform):用于改变对象的大小。
  • 旋转动画(RotateTransform):用于改变对象的旋转角度。
  • 颜色动画(ColorAnimation):用于改变颜色。

1. 缩放动画

在XAML文件中添加按钮

<Window x:Class="Animation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525" >
    <StackPanel>
        <Button Name="AnimatedButton" Content="点击缩放!" Width="100" Height="50"
         RenderTransformOrigin="0.5, 0.5" Click="AnimatedButton_Click" Margin="20">
            <Button.RenderTransform>
                <ScaleTransform />
            </Button.RenderTransform>
        </Button>
    </StackPanel>
</Window>

编辑动画

using System;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Media;

namespace Animation.Views
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void AnimatedButton_Click(object sender, RoutedEventArgs e)
        {
            // 获取当前的缩放变换
            ScaleTransform scale = (ScaleTransform)AnimatedButton.RenderTransform;
            // 创建一个位移动画
            DoubleAnimation scaleAnimationX = new DoubleAnimation
            {
                From = 1.0, // 起始缩放
                To = 1.3,   // 结束缩放
                Duration = TimeSpan.FromSeconds(0.1), // 动画持续时间
                AutoReverse = true // 自动反转
            };
            DoubleAnimation scaleAnimationY = new DoubleAnimation
            {
                From = 1.0, // 起始缩放
                To = 1.3,   // 结束缩放
                Duration = TimeSpan.FromSeconds(0.1), // 动画持续时间
                AutoReverse = true // 自动反转
            };
            // 应用动画到缩放变换
            scale.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimationX);
            scale.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimationY);
        }
    }
}

动画效果

WPF缩放动画

2. 位移动画

<Window x:Class="Animation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525" >
    <Canvas Name="MyCanvas">
        <Button Content="Start Animation" Click="Button_Click" Name="MyButton"/>
    </Canvas>
</Window>

在按钮的点击事件中编辑动画

using System;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Media;
using System.Windows.Controls;
using Example;

namespace Animation.Views
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            // 创建位移动画
            DoubleAnimation animation = new DoubleAnimation
            {
                From = 0,
                To = MyCanvas.ActualWidth-MyButton.ActualWidth,
                Duration = new Duration(TimeSpan.FromSeconds(2)),
                AutoReverse = true
            };

            // 应用动画到按钮的X轴位移
            TranslateTransform translateTransform = new TranslateTransform();
            MyButton.RenderTransform = translateTransform;

            // 开始动画
            translateTransform.BeginAnimation(TranslateTransform.XProperty, animation);
        }
    }
}

动画效果

WPF位移动画

3. 旋转动画

<Window x:Class="Animation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525" >
    <Canvas Name="MyCanvas">
        <Button Content="Start Animation" Click="Button_Click" Name="MyButton"/>
        <Grid>
            <Button Name="MyButton1" Width="100" Height="50" Content="点击我" Click="MyButton_Click1"
                RenderTransformOrigin="0.5, 0.5" Margin="178,49,-178,-49">
                <Button.RenderTransform>
                    <RotateTransform x:Name="ButtonRotateTransform" Angle="0"/>
                </Button.RenderTransform>
            </Button>
        </Grid>
    </Canvas>
    
</Window>

编辑动画

using System;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Media;
using System.Windows.Controls;
using Example;

namespace Animation.Views
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            // 创建位移动画
            DoubleAnimation animation = new DoubleAnimation
            {
                From = 0,
                To = MyCanvas.ActualWidth-MyButton.ActualWidth,
                Duration = new Duration(TimeSpan.FromSeconds(2)),
                AutoReverse = true
            };

            // 应用动画到按钮的X轴位移
            TranslateTransform translateTransform = new TranslateTransform();
            MyButton.RenderTransform = translateTransform;

            // 开始动画
            translateTransform.BeginAnimation(TranslateTransform.XProperty, animation);
        }
        private void MyButton_Click1(object sender, RoutedEventArgs e)
        {
            // 创建旋转动画
            DoubleAnimation animation = new DoubleAnimation
            {
                From = 0,
                To = 360, // 旋转360度
                Duration = new Duration(TimeSpan.FromSeconds(1)),
                RepeatBehavior = RepeatBehavior.Forever // 无限循环
            };

            // 应用动画到按钮的旋转角度
            ButtonRotateTransform.BeginAnimation(RotateTransform.AngleProperty, animation);
        }
    }
   
}

动画效果

WPF旋转动画

4. 颜色动画

在页面中直给Button2接定义颜色动画

<Window x:Class="Animation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525" >
    <Window.Resources>
        <Storyboard x:Key="ColorAnimationStoryboard">
            <ColorAnimation
                Storyboard.TargetName="MyButton2"
                Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
                From="Green"
                To="GreenYellow"
                Duration="0:0:1.5"
                AutoReverse="True"
                RepeatBehavior="Forever" />
        </Storyboard>
    </Window.Resources>
    <Canvas Name="MyCanvas">
        <Button Content="Start Animation" Click="Button_Click" Name="MyButton"/>
        <Grid>
            <Button Name="MyButton1" Width="100" Height="50" Content="点击我" Click="MyButton_Click1"
                RenderTransformOrigin="0.5, 0.5" Margin="178,49,-178,-49">
                <Button.RenderTransform>
                    <RotateTransform x:Name="ButtonRotateTransform" Angle="0"/>
                </Button.RenderTransform>
            </Button>
        </Grid>
        <Button Name="MyButton2" Width="100" Height="50" Content="点击我" Click="MyButton_Click2" Canvas.Left="162" Canvas.Top="167"/>
    </Canvas>
    
</Window>

点击按钮时触发动画

 private void MyButton_Click2(object sender, RoutedEventArgs e)
 {
     // 从资源中获取Storyboard并开始动画
     Storyboard storyboard = (Storyboard)FindResource("ColorAnimationStoryboard");
     storyboard.Begin();
 }

动画效果

WPF颜色动画

5. 透明度动画

<Window x:Class="Animation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525" >
    <Window.Resources>
        <Storyboard x:Key="ColorAnimationStoryboard">
            <ColorAnimation
                Storyboard.TargetName="MyButton2"
                Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
                From="Green"
                To="GreenYellow"
                Duration="0:0:1.5"
                AutoReverse="True"
                RepeatBehavior="Forever" />
        </Storyboard>
    </Window.Resources>
    <Canvas Name="MyCanvas">
        <Button Content="Start Animation" Click="Button_Click" Name="MyButton"/>
        <Grid>
            <Button Name="MyButton1" Width="100" Height="50" Content="点击我" Click="MyButton_Click1"
                RenderTransformOrigin="0.5, 0.5" Margin="178,49,-178,-49">
                <Button.RenderTransform>
                    <RotateTransform x:Name="ButtonRotateTransform" Angle="0"/>
                </Button.RenderTransform>
            </Button>
        </Grid>
        <Button Name="MyButton2" Width="100" Height="50" Content="点击我" Click="MyButton_Click2" Canvas.Left="162" Canvas.Top="167"/>

        <Button Name="MyButton3" Width="100" Height="50" Content="点击我" Click="MyButton_Click3" Background="Blue" RenderTransformOrigin="0.897,3.506" Canvas.Left="162" Canvas.Top="245"/>
    </Canvas>
    
</Window>

编辑动画

 private void MyButton_Click3(object sender, RoutedEventArgs e)
 {
     // 创建透明度动画
     DoubleAnimation opacityAnimation = new DoubleAnimation
     {
         From = 1.0,  // 初始透明度
         To = 0.4,    // 目标透明度
         Duration = new Duration(TimeSpan.FromSeconds(1)), // 动画持续时间
         AutoReverse = true  ,// 动画反向播放
          RepeatBehavior = RepeatBehavior.Forever // 无限循环
     };

     // 应用动画到按钮的透明度
     MyButton3.BeginAnimation(UIElement.OpacityProperty, opacityAnimation);
 }

动画效果

WPF透明度动画

WPF动画的应用很广泛和也很灵活,如关键帧动画的设计,动画的数据绑定,这里只是简单的示范,后续在使用过程中会再更。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

晶圆测试中自动化上下料的重要性与应用

随着科技的飞速发展&#xff0c;硅光技术在通信、数据处理等领域展现出巨大的应用潜力。硅光晶圆作为硅光技术的核心源头组件&#xff0c;其性能的稳定性和可靠性对于整个系统的运行至关重要。因此&#xff0c;对硅光晶圆的测试成为生产过程中不可或缺的一环。近年来&#xff0…

udp_socket

文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen关于inet_ntoa UDP服务器封装 系…

Perfetto学习大全

Perfetto 是一个功能强大的性能分析和追踪工具&#xff0c;主要用于捕获和分析复杂系统中的事件和性能数据&#xff0c;特别是在 Android 和 Linux 环境下。它的核心目标是帮助开发者深入了解系统和应用程序的运行状态&#xff0c;以便优化性能和诊断问题。 Perfetto的主要作用…

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…

教学内容全覆盖:航拍杂草检测与分类

1.背景意义 研究背景与意义 随着全球农业生产的不断发展&#xff0c;杂草的管理与控制成为了提升作物产量和质量的重要环节。杂草不仅会与作物争夺水分、养分和光照&#xff0c;还可能成为病虫害的滋生地&#xff0c;从而对农业生产造成严重影响。因此&#xff0c;准确、快速…

【倍数问题——同余系】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e5 10, M 1e3 10; int maxx[M][4]; void consider(int r, int x) {if(x > maxx[r][1]){maxx[r][3] maxx[r][2];maxx[r][2] maxx[r][1];maxx[r][1] x;}else if(x > maxx[r][2]){maxx[…

『VUE』33. 组件保持存活,切换组件时的生命周期(详细图文注释)

目录 动态切换组件导致的问题引入keeplive标签总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 动态切换组件导致的问题 动态切换组件使得每次组件都会被卸载然后重新初始化,导致数据每次都初始化,无法保存前一个组件的数据. …

【C++】从C到C++

C和C一些语法区别 1.三目运算符&#xff1a;在C语言中返回的是一个常量&#xff0c;是不能被赋值的&#xff1b;而C中返回的是变量&#xff0c;可以被赋值 2.C中的函数必须要写返回值类型 3.在全局下&#xff0c;C不允许int a;和int a10;等这种重定义二义性操作 4.在C中不要…

Redisson学习教程(B站诸葛)

弱智级别 package org.example.controller;public class IndexController {Autowiredprivate Redisson redisson;Autowiredprivate StringRedisTemplate stringRedisTemplate;RequestMapping("/deduct_storck")public String deductStock() {String lockKey "…

2024信创数据库TOP30之蚂蚁集团OceanBase

数据库作为存储、管理和分析这些数据的关键工具&#xff0c;其地位自然不言而喻。随着信息技术的日新月异&#xff0c;数据库技术也在不断演进&#xff0c;以满足日益复杂多变的市场需求。近日&#xff0c;备受瞩目的“2024信创数据库TOP30”榜单由DBC联合CIW/CIS权威发布&…

基于Java后台实现百度、高德和WGS84坐标的转换实战

目录 前言 一、需求的缘由 1、百度坐标拾取 2、高德坐标拾取 3、不同地图的坐标展示 二、后端坐标偏移转换处理 1、相关类库介绍 2、coordtransorm类图介绍 3、后台实际转换 三、总结 前言 在当今数字化时代&#xff0c;地理位置信息的精确性和实时性对于各种应用至…

Wireshark抓取HTTPS流量技巧

一、工具准备 首先安装wireshark工具&#xff0c;官方链接&#xff1a;Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成&#xff0c;用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件&#xff08;例如包含密钥的…

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》&#xff1a; - 这是中国网络安全的基本法律&#xff0c;于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务&#xff0c;包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》&#xff1a; …

111 - Lecture 10

File I/O and GUI with JavaFX 文件输入/输出与JavaFX图形用户界面 一、Overview 1. File I/O &#xff08;1&#xff09; learning Java File I/O mechanism &#xff08;2&#xff09; writing into and reading from a file 使用文件I/O进行数据读取和…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…

vue3:使用插件递归组件

vue3:使用插件递归组件 首先安装插件 npm i unplugin-vue-define-optionsvite.config.ts 配置插件 // vite.config.ts// 引入 unplugin-vue-define-options import DefineOptions from "unplugin-vue-define-options"; export default defineConfig({// 注册插件 De…

开源远程桌面工具:RustDesk

在远程办公和远程学习日益普及的今天&#xff0c;我们经常需要远程访问办公电脑或帮助他人解决电脑问题。 市面上的远程控制软件要么收费昂贵&#xff0c;要么需要复杂的配置&#xff0c;更让人担心的是数据安全问题。 最近我发现了一款名为 RustDesk 的开源远程桌面工具&…

springboot整合hive

springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

ChatGPT 与其他 AI 技术在短视频营销中的技术应用与协同策略

摘要&#xff1a; 本文深入探讨了 ChatGPT 及其他 AI 技术在短视频营销中的应用。从技术层面剖析了这些技术如何助力短视频内容创作、个性化推荐、用户互动以及营销效果评估等多方面&#xff0c;通过具体方法分析、数据引用与大模型工具介绍&#xff0c;旨在为短视频营销领域提…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议&#xff0c;概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…