zoukankan      html  css  js  c++  java
  • 【WPF】WPF Behavior 行为 实现鼠标移入按钮自动旋转

    1、需要下载 System.Windows.Interactivity.dll  提取码: dc5a 这是微软提供的扩展dll

    2、项目引用DLL后,在前端加入代码:

     xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

    3、后台代码:(实现的功能是鼠标移入,旋转360度,鼠标移出,还原)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Interactivity;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    
    namespace WpfStyles
    {
        public class RotateBehavior : Behavior<FrameworkElement>
        {
            protected override void OnAttached()
            {
                base.OnAttached();
           // AssociatedObject 是行为的关联对象
           this.AssociatedObject.MouseEnter += AssociatedObject_MouseEnter;
               this.AssociatedObject.MouseLeave += AssociatedObject_MouseLeave;
            }
    
            private void AssociatedObject_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
            {
                var element = sender as FrameworkElement;
                RotateTransform rotateTransform = new RotateTransform();
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                DoubleAnimation animation = new DoubleAnimation(360, 0, new Duration(new TimeSpan(0, 0, 1)), FillBehavior.Stop);
                animation.Completed += (sender1, e1) => rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null);
                rotateTransform.BeginAnimation(RotateTransform.AngleProperty, animation);
                element.RenderTransform = rotateTransform;
            }
    
            private void AssociatedObject_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
            {
                var element = sender as FrameworkElement;
                RotateTransform rotateTransform = new RotateTransform();
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                DoubleAnimation animation = new DoubleAnimation(0, 360, new Duration(new TimeSpan(0, 0, 0, 1)), FillBehavior.Stop);
                animation.Completed += (sender1, e1) => rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null);
                //animation.RepeatBehavior = RepeatBehavior.Forever;
                //animation.AutoReverse = true;
                rotateTransform.BeginAnimation(RotateTransform.AngleProperty, animation);
                element.RenderTransform = rotateTransform;
            }
    
            protected override void OnDetaching()
            {
                base.OnDetaching();
            }
        }
    }

    4、使用,除了前面提到的引用

     xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

    只需要再加一行代码即可:
     <Button  Content="旋转" Grid.Row="1" Grid.Column="5">
                <i:Interaction.Behaviors>
                    <local:RotateBehavior></local:RotateBehavior>
                </i:Interaction.Behaviors>
    </Button>
  • 相关阅读:
    atitit.基于http json api 接口设计 最佳实践 总结o7
    atitit.表单验证 的dsl 本质跟 easyui ligerui比较
    Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
    atitit.设计模式(2) -----查表模式/ command 总结
    atitit.spring3 mvc url配置最佳实践
    atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
    atitit.RESTful服务的概览and框架选型
    atitit.查看预编译sql问号 本质and原理and查看原生sql语句
    atitit.atitit.hb many2one relate hibernate 多对一关联配置..
    atitit.hbnt orm db 新新增更新最佳实践o7
  • 原文地址:https://www.cnblogs.com/mqxs/p/15247073.html
Copyright © 2011-2022 走看看