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>
  • 相关阅读:
    【技术博客】JWT -- JSON WEB TOKEN
    [2020 BUAA 软件工程]结对项目作业
    [2020 BUAA 软件工程]软件案例分析
    [2020 BUAA 软件工程]个人项目作业
    [2020 BUAA 软件工程]个人博客作业
    [2020 BUAA 软件工程]第 1 次个人作业
    BUAA_OO第四单元总结性博客作业
    BUAA_OO第三单元总结性博客作业
    BUAA_OO第二单元总结性博客作业
    北航OO第四单元总结(课程总结)
  • 原文地址:https://www.cnblogs.com/mqxs/p/15247073.html
Copyright © 2011-2022 走看看