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样式实现

                                                                                                                                  

相关内容

热门资讯

微扑克辅助器!德州平台有没有挂... 您好:德州平台有没有挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌...
AApoker透视挂!wepo... 很多人使用云端 AI 时,都担心wepoker透视挂是真的吗、内部资料上传带来隐私风险。这款本地运行...
WePoKer透视!wepok... WePoKer透视!wepoker如何拿到好牌,分享透视多功能软件APP模板;近期一款 AI 黑科技...
红龙扑克透视挂!德扑之星规律,... 红龙扑克透视挂!德扑之星规律,解迷透视挂多功能插件APP法门是一款可以让一直输的玩家,快速成为一个“...
aapoker透视!WePoK... 您好,WePoKer有没有透视软件挂这款游戏可以开挂的,确实是有挂的,需要了解加微【48527505...
红龙扑克开挂!微扑克的辅助工具... 很多人使用云端 AI 时,都担心微扑克的辅助工具有哪些、内部资料上传带来隐私风险。这款本地运行的 A...
aapoker辅助!wepok... 您好:wepoker私人局怎么设置抽水这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会...
aapoker辅助挂!wepo... aapoker辅助挂!wepoker透视挂安全吗,普及辅助挂多功能方法APP策略AI 智能体黑科技再...
红龙PoKer辅助挂!wepo... 您好:wepokerplus透视挂真的假的这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌...
德扑之星辅助挂!德州ai辅助有... 德扑之星辅助挂!德州ai辅助有用吗,详细辅助挂多功能下载APP指南书是一款可以让一直输的玩家,快速成...