WPF实现一个带旋转动画的菜单栏
创始人
2024-12-29 06:41:42
0

WPF实现一个带旋转动画的菜单栏

  • 一、创建WPF项目及文件
    • 1、创建项目
    • 2、创建文件夹及文件
    • 3、添加引用
  • 二、代码实现
    • 2.ControlAttachProperty类

一、创建WPF项目及文件

1、创建项目

打开VS2022,创建一个WPF项目,如下所示
在这里插入图片描述在这里插入图片描述

2、创建文件夹及文件

创建资源文件夹,添加字体图标文件,添加 Menu样式文件,如下所示
在这里插入图片描述
创建公共附加属性用控件类库,并创建对应的 ControlAttachProperty 类文件如下:
在这里插入图片描述
在这里插入图片描述

3、添加引用

右键 Menu_WPF 添加引用,将类库引用到当前项目
在这里插入图片描述

二、代码实现

2.ControlAttachProperty类

代码如下(示例):

using Microsoft.Win32; using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using CheckBox = System.Windows.Controls.CheckBox; using ComboBox = System.Windows.Controls.ComboBox; using OpenFileDialog = Microsoft.Win32.OpenFileDialog; using RadioButton = System.Windows.Controls.RadioButton; using RichTextBox = System.Windows.Controls.RichTextBox; using TextBox = System.Windows.Controls.TextBox;  namespace Common.UserControl.Extession {     ///      /// 公共附加属性     ///      public static class ControlAttachProperty     {          #region FocusBorderBrush 焦点边框色,输入控件          public static readonly DependencyProperty FocusBorderBrushProperty = DependencyProperty.RegisterAttached(             "FocusBorderBrush", typeof(Brush), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));         public static void SetFocusBorderBrush(DependencyObject element, Brush value)         {             element.SetValue(FocusBorderBrushProperty, value);         }         public static Brush GetFocusBorderBrush(DependencyObject element)         {             return (Brush)element.GetValue(FocusBorderBrushProperty);         }          #endregion          #region MouseOverBorderBrush 鼠标进入边框色,输入控件          public static readonly DependencyProperty MouseOverBorderBrushProperty =             DependencyProperty.RegisterAttached("MouseOverBorderBrush", typeof(Brush), typeof(ControlAttachProperty),                 new FrameworkPropertyMetadata(Brushes.Transparent,                     FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.Inherits));          ///          /// Sets the brush used to draw the mouse over brush.         ///          public static void SetMouseOverBorderBrush(DependencyObject obj, Brush value)         {             obj.SetValue(MouseOverBorderBrushProperty, value);         }          ///          /// Gets the brush used to draw the mouse over brush.         ///          [AttachedPropertyBrowsableForType(typeof(TextBox))]         [AttachedPropertyBrowsableForType(typeof(CheckBox))]         [AttachedPropertyBrowsableForType(typeof(RadioButton))]         [AttachedPropertyBrowsableForType(typeof(DatePicker))]         [AttachedPropertyBrowsableForType(typeof(ComboBox))]         [AttachedPropertyBrowsableForType(typeof(RichTextBox))]         public static Brush GetMouseOverBorderBrush(DependencyObject obj)         {             return (Brush)obj.GetValue(MouseOverBorderBrushProperty);         }          #endregion          #region AttachContentProperty 附加组件模板         ///          /// 附加组件模板         ///          public static readonly DependencyProperty AttachContentProperty = DependencyProperty.RegisterAttached(             "AttachContent", typeof(ControlTemplate), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));          public static ControlTemplate GetAttachContent(DependencyObject d)         {             return (ControlTemplate)d.GetValue(AttachContentProperty);         }          public static void SetAttachContent(DependencyObject obj, ControlTemplate value)         {             obj.SetValue(AttachContentProperty, value);         }         #endregion          #region WatermarkProperty 水印         ///          /// 水印         ///          public static readonly DependencyProperty WatermarkProperty = DependencyProperty.RegisterAttached(             "Watermark", typeof(string), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(""));          public static string GetWatermark(DependencyObject d)         {             return (string)d.GetValue(WatermarkProperty);         }          public static void SetWatermark(DependencyObject obj, string value)         {             obj.SetValue(WatermarkProperty, value);         }         #endregion          #region FIconProperty 字体图标         ///          /// 字体图标         ///          public static readonly DependencyProperty FIconProperty = DependencyProperty.RegisterAttached(             "FIcon", typeof(string), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(""));          public static string GetFIcon(DependencyObject d)         {             return (string)d.GetValue(FIconProperty);         }          public static void SetFIcon(DependencyObject obj, string value)         {             obj.SetValue(FIconProperty, value);         }         #endregion          #region FIconSizeProperty 字体图标大小         ///          /// 字体图标         ///           public static readonly DependencyProperty FIconSizeProperty = DependencyProperty.RegisterAttached(             "FIconSize", typeof(double), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(12D));          public static double GetFIconSize(DependencyObject d)         {             return (double)d.GetValue(FIconSizeProperty);         }          public static void SetFIconSize(DependencyObject obj, double value)         {             obj.SetValue(FIconSizeProperty, value);         }         #endregion          #region FIconMarginProperty 字体图标边距         ///          /// 字体图标         ///          public static readonly DependencyProperty FIconMarginProperty = DependencyProperty.RegisterAttached(             "FIconMargin", typeof(Thickness), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));          public static Thickness GetFIconMargin(DependencyObject d)         {             return (Thickness)d.GetValue(FIconMarginProperty);         }          public static void SetFIconMargin(DependencyObject obj, Thickness value)         {             obj.SetValue(FIconMarginProperty, value);         }         #endregion          #region AllowsAnimationProperty 启用旋转动画         ///          /// 启用旋转动画         ///          public static readonly DependencyProperty AllowsAnimationProperty = DependencyProperty.RegisterAttached("AllowsAnimation"             , typeof(bool), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(false, AllowsAnimationChanged));          public static bool GetAllowsAnimation(DependencyObject d)         {             return (bool)d.GetValue(AllowsAnimationProperty);         }          public static void SetAllowsAnimation(DependencyObject obj, bool value)         {             obj.SetValue(AllowsAnimationProperty, value);         }          ///          /// 旋转动画刻度         ///          private static DoubleAnimation RotateAnimation = new DoubleAnimation(0, new Duration(TimeSpan.FromMilliseconds(200)));          ///          /// 绑定动画事件         ///          private static void AllowsAnimationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)         {             var uc = d as FrameworkElement;             if (uc == null) return;             if (uc.RenderTransformOrigin == new Point(0, 0))             {                 uc.RenderTransformOrigin = new Point(0.5, 0.5);                 RotateTransform trans = new RotateTransform(0);                 uc.RenderTransform = trans;             }             var value = (bool)e.NewValue;             if (value)             {                 RotateAnimation.To = 180;                 uc.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, RotateAnimation);             }             else             {                 RotateAnimation.To = 0;                 uc.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, RotateAnimation);             }         }         #endregion          #region CornerRadiusProperty Border圆角         ///          /// Border圆角         ///          public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.RegisterAttached(             "CornerRadius", typeof(CornerRadius), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));          public static CornerRadius GetCornerRadius(DependencyObject d)         {             return (CornerRadius)d.GetValue(CornerRadiusProperty);         }          public static void SetCornerRadius(DependencyObject obj, CornerRadius value)         {             obj.SetValue(CornerRadiusProperty, value);         }         #endregion          #region LabelProperty TextBox的头部Label         ///          /// TextBox的头部Label         ///          public static readonly DependencyProperty LabelProperty = DependencyProperty.RegisterAttached(             "Label", typeof(string), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));          [AttachedPropertyBrowsableForType(typeof(TextBox))]         public static string GetLabel(DependencyObject d)         {             return (string)d.GetValue(LabelProperty);         }          public static void SetLabel(DependencyObject obj, string value)         {             obj.SetValue(LabelProperty, value);         }         #endregion          #region LabelTemplateProperty TextBox的头部Label模板         ///          /// TextBox的头部Label模板         ///          public static readonly DependencyProperty LabelTemplateProperty = DependencyProperty.RegisterAttached(             "LabelTemplate", typeof(ControlTemplate), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));          [AttachedPropertyBrowsableForType(typeof(TextBox))]         public static ControlTemplate GetLabelTemplate(DependencyObject d)         {             return (ControlTemplate)d.GetValue(LabelTemplateProperty);         }          public static void SetLabelTemplate(DependencyObject obj, ControlTemplate value)         {             obj.SetValue(LabelTemplateProperty, value);         }         #endregion               } }   

Menu样式文件实现

           

MainWindow样式实现

                                                                                                                                  

相关内容

热门资讯

10分钟辅助挂!搜圈麻将假不假... 10分钟辅助挂!搜圈麻将假不假“详细透视辅助助手教程”原来真的有挂,您好,搜圈麻将假不假这款游戏可以...
记者发布!福建十三水 辅助器(... 记者发布!福建十三水 辅助器(透视)透视辅助神器(2023已更新)(哔哩哔哩);1、福建十三水 辅助...
6分钟实锤!博雅红河棋盘外 挂... 您好,博雅红河棋盘外 挂这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多玩家...
八分钟辅助挂!微乐陕西麻将小程... 八分钟辅助挂!微乐陕西麻将小程序有猫腻吗“详细透视辅助脚本教程”原来真的有挂1、下载好微乐陕西麻将小...
必备科技!多乐够级捕鱼辅助软件... 必备科技!多乐够级捕鱼辅助软件(透视辅助)透明挂透视辅助挂(2023已更新)(哔哩哔哩)1、多乐够级...
让我来分享经验!胖猪竞技有外挂... 让我来分享经验!胖猪竞技有外挂没(辅助)确实存在有挂(2026已更新)(哔哩哔哩)胖猪竞技有外挂没辅...
七分钟攻略!七彩云南游戏有外 ... 七分钟攻略!七彩云南游戏有外 挂吗,wePoke原来真的是有挂,wpk教程(有挂细节)1)七彩云南游...
交流学习经验!老友广东麻将来牌... 交流学习经验!老友广东麻将来牌规律(透视)外挂透视辅助插件(2024已更新)(哔哩哔哩)1、在老友广...
13钟辅助挂!闲来贵州麻将可以... 13钟辅助挂!闲来贵州麻将可以挂吗“详细透视辅助app教程”原来真的有挂是一款可以让一直输的玩家,快...
9分钟攻略!乐乐上海麻将有没有... 9分钟攻略!乐乐上海麻将有没有挂,impoker本来有挂,黑科技教程(有挂教程)乐乐上海麻将有没有挂...