大型网站开发收费,微信小程序开发工具手机版,做网站手机端需要pc端的源代码吗,网站 白名单WPF 蒙罩层 LoadingPage 原文:WPF 蒙罩层 LoadingPageWPF 蒙罩层 LoadingPage 前言 无论是在PC客户端#xff0c;移动端#xff0c;网站#xff0c;在遇到长时间处理的时候都会需要用到蒙罩层#xff0c;让用户有更好的体现。今天上网逛了一下各位前辈网友的蒙罩层的实现方… WPF 蒙罩层 LoadingPage 原文:WPF 蒙罩层 LoadingPageWPF 蒙罩层 LoadingPage 前言 无论是在PC客户端移动端网站在遇到长时间处理的时候都会需要用到蒙罩层让用户有更好的体现。今天上网逛了一下各位前辈网友的蒙罩层的实现方式觉得有很多都搞复杂了利用前台代码后台代码数学计算无疑增加了维护的难度。然而本人参考了各位前辈的实现以后自己实现了一个可重用LoadingPage控件欢迎各位下载使用。 需求 需求先行是必须的我的目标是做成怎样一个效果呢 1.是一个控件可以在.NET各环境中得以重用。 2.可配置例如颜色大小提醒字符串等等的属性用户可以自定义以满足用户所在情况的需求。 3.大小比例自适应不同大小的窗口载体能自动改变自身大小比例。 4.效果全部xaml实现全部集中于xaml可控制难度不会大维护起来方便用户拷贝xaml也方便。 解决方法 1.新建WPF用户控件库进行开发。 2.使用依赖项属性然后前台xaml使用属性绑定来实现。 3.使用ViewBox控件该控件能够自动缩放内容。 4.在xaml中的写动画代码。 结果展示 制作过程 一新建一个WPF用户控件库工程新建一个WPF控件。这步不解释 二为了实现蒙罩效果我们把控件的背景弄成黑色背景并且透明度为0.2。 UserControl.BackgroundSolidColorBrush ColorBlack Opacity0.2 /SolidColorBrush
/UserControl.Background 三然后就是先利用Canvas作为背景在其上画一个由小圆圈构成的大圈使用控件Ellipse。 Canvas RenderTransformOrigin0.5,0.5 HorizontalAlignmentCenter x:NameloadCancasVerticalAlignmentCenter Width120 Height120 Canvas.ResourcesStyle TargetTypeEllipseSetter PropertyWidth Value10 /SetterSetter PropertyHeight Value10 /SetterSetter PropertyCanvas.Left Value30/SetterSetter PropertyCanvas.Top Value30/SetterSetter PropertyStretch ValueFill/SetterSetter PropertyFill ValueBlue/SetterSetter PropertyRenderTransformOrigin Value3,3/Setter/Style/Canvas.ResourcesEllipse /EllipseEllipse Opacity0.9Ellipse.RenderTransformTransformGroupRotateTransform Angle36//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.8Ellipse.RenderTransformTransformGroupRotateTransform Angle72//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.7Ellipse.RenderTransformTransformGroupRotateTransform Angle108//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.6Ellipse.RenderTransformTransformGroupRotateTransform Angle144//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.5Ellipse.RenderTransformTransformGroupRotateTransform Angle180//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.4Ellipse.RenderTransformTransformGroupRotateTransform Angle216//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.3Ellipse.RenderTransformTransformGroupRotateTransform Angle252//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.2Ellipse.RenderTransformTransformGroupRotateTransform Angle288//TransformGroup/Ellipse.RenderTransform/EllipseEllipse Opacity0.1 Ellipse.RenderTransformTransformGroupRotateTransform Angle324//TransformGroup/Ellipse.RenderTransform/EllipseCanvas.RenderTransformTransformGroupRotateTransform x:NameSpinnerRotate Angle0 //TransformGroup/Canvas.RenderTransform/Canvas/Grid 这样就形成了一个圈然后为了实现目标3(内容能自动改变大小)使用一个viewBox作为容器包住这个Canvas。不贴代码了 四旋转动画编写。 因为我在Canvas画了一个圈然而我只需无限旋转Canvas便可实现像小圆圈在动一样。下面看一下Canvas的触发器在触发器中实现动画的编写。 Canvas.TriggersEventTrigger RoutedEventLoadedBeginStoryboard NameloadAnimationStoryboard DoubleAnimation Storyboard.TargetNameloadCancas Storyboard.TargetProperty(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle) From360 To0 RepeatBehaviorForever Duration0:0:3/DoubleAnimation/Storyboard/BeginStoryboard/EventTriggerEventTrigger RoutedEventUnloadedStopStoryboard BeginStoryboardNameloadAnimation/StopStoryboard/EventTrigger
/Canvas.Triggers 五属性可配置使用依赖属性并且在xaml中写绑定下面先看后台代码中的依赖项属性的定义然后前台绑定就补贴了统一在附件中可以看到。 public partial class LoadingPage : UserControl{public LoadingPage(){InitializeComponent();}#region 加载圆圈的margin[DescriptionAttribute(加载圆圈的margin), CategoryAttribute(扩展), DefaultValueAttribute(0)]public string LoadCirclesMargin{get { return (string)GetValue(LoadCirclesMarginProperty); }set { SetValue(LoadCirclesMarginProperty, value); }}public static readonly DependencyProperty LoadCirclesMarginProperty DependencyProperty.Register(LoadCirclesMargin, typeof(string), typeof(LoadingPage),new FrameworkPropertyMetadata(50));#endregion#region 加载中的提示[DescriptionAttribute(加载中的提示), CategoryAttribute(扩展), DefaultValueAttribute(0)]public string LoadingText{get { return (string)GetValue(LoadingTextProperty); }set { SetValue(LoadingTextProperty, value); }}public static readonly DependencyProperty LoadingTextProperty DependencyProperty.Register(LoadingText, typeof(string), typeof(LoadingPage),new FrameworkPropertyMetadata(加载中));#endregion#region 加载中的提示的字体大小[DescriptionAttribute(加载中的提示的字体大小), CategoryAttribute(扩展), DefaultValueAttribute(0)]public int LoadingTextFontSize{get { return (int)GetValue(LoadingTextFontSizeProperty); }set { SetValue(LoadingTextFontSizeProperty, value); }}public static readonly DependencyProperty LoadingTextFontSizeProperty DependencyProperty.Register(LoadingTextFontSize, typeof(int), typeof(LoadingPage),new FrameworkPropertyMetadata(12));#endregion#region 圆圈的颜色[DescriptionAttribute(圆圈的颜色), CategoryAttribute(扩展), DefaultValueAttribute(0)]public Brush CirclesBrush{get { return (Brush)GetValue(CirclesBrushProperty); }set { SetValue(CirclesBrushProperty, value); }}public static readonly DependencyProperty CirclesBrushProperty DependencyProperty.Register(CirclesBrush, typeof(Brush), typeof(LoadingPage),new FrameworkPropertyMetadata(Brushes.Black));#endregion#region 加载中的提示的字体颜色[DescriptionAttribute(加载中的提示的字体颜色), CategoryAttribute(扩展), DefaultValueAttribute(0)]public Brush LoadingTextForeground{get { return (Brush)GetValue(LoadingTextForegroundProperty); }set { SetValue(LoadingTextForegroundProperty, value); }}public static readonly DependencyProperty LoadingTextForegroundProperty DependencyProperty.Register(LoadingTextForeground, typeof(Brush), typeof(LoadingPage),new FrameworkPropertyMetadata(Brushes.DarkSlateGray));#endregion} 大功告成上面的代码都是为了展示原理而分拆出来的零碎代码如果想使用该控件可以点下面的下载 完整Demo下载 posted on 2018-09-22 01:18 NET未来之路 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/lonelyxmas/p/9689225.html