日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 蒙罩层 LoadingPage

發布時間:2023/12/10 asp.net 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 蒙罩层 LoadingPage 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WPF 蒙罩層 LoadingPage 原文:WPF 蒙罩層 LoadingPage

WPF 蒙罩層 LoadingPage

?

前言

  無論是在PC客戶端,移動端,網站,在遇到長時間處理的時候都會需要用到蒙罩層,讓用戶有更好的體現。今天上網逛了一下各位前輩網友的蒙罩層的實現方式,覺得有很多都搞復雜了(利用前臺代碼+后臺代碼+數學計算),無疑增加了維護的難度。然而,本人參考了各位前輩的實現以后,自己實現了一個可重用LoadingPage控件,歡迎各位下載使用。

?

需求

  需求先行是必須的,我的目標是做成怎樣一個效果呢?

    1.是一個控件,可以在.NET各環境中得以重用。

    2.可配置,例如顏色,大小,提醒字符串等等的屬性,用戶可以自定義,以滿足用戶所在情況的需求。

    3.大小比例自適應,不同大小的窗口載體,能自動改變自身大小比例。

    4.效果全部xaml實現,全部集中于xaml可控制難度不會大,維護起來方便,用戶拷貝xaml也方便。

?

解決方法

    1.新建WPF用戶控件庫進行開發。

    2.使用依賴項屬性,然后前臺xaml使用屬性綁定來實現。

    3.使用ViewBox控件(該控件能夠自動縮放內容)。

    4.在xaml中的寫動畫代碼。

結果展示

  

?

制作過程

  一:新建一個"WPF用戶控件庫"工程,新建一個WPF控件。(這步不解釋)

  二:為了實現蒙罩效果,我們把控件的背景弄成黑色背景,并且透明度為0.2。

<UserControl.Background><SolidColorBrush Color="Black" Opacity="0.2" ></SolidColorBrush> </UserControl.Background>

  三:然后就是先利用Canvas作為背景,在其上畫一個由小圓圈構成的大圈,使用控件Ellipse。

<Canvas RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" x:Name="loadCancas"VerticalAlignment="Center" Width="120" Height="120" ><Canvas.Resources><Style TargetType="Ellipse"><Setter Property="Width" Value="10" ></Setter><Setter Property="Height" Value="10" ></Setter><Setter Property="Canvas.Left" Value="30"></Setter><Setter Property="Canvas.Top" Value="30"></Setter><Setter Property="Stretch" Value="Fill"></Setter><Setter Property="Fill" Value="Blue"></Setter><Setter Property="RenderTransformOrigin" Value="3,3"></Setter></Style></Canvas.Resources><Ellipse ></Ellipse><Ellipse Opacity="0.9"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="36"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.8"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="72"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.7"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="108"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.6"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="144"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.5"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="180"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.4"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="216"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.3"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="252"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.2"><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="288"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Ellipse Opacity="0.1" ><Ellipse.RenderTransform><TransformGroup><RotateTransform Angle="324"/></TransformGroup></Ellipse.RenderTransform></Ellipse><Canvas.RenderTransform><TransformGroup><RotateTransform x:Name="SpinnerRotate" Angle="0" /></TransformGroup></Canvas.RenderTransform></Canvas></Grid>

  這樣就形成了一個圈,然后為了實現目標3(內容能自動改變大小),使用一個viewBox作為容器,包住這個Canvas。(不貼代碼了)

?

四:旋轉動畫編寫。

  因為我在Canvas畫了一個圈,然而我只需無限旋轉Canvas便可實現像小圓圈在動一樣。下面看一下Canvas的觸發器,在觸發器中實現動畫的編寫。

<Canvas.Triggers><EventTrigger RoutedEvent="Loaded"><BeginStoryboard Name="loadAnimation"><Storyboard>
        <DoubleAnimation Storyboard.TargetName="loadCancas" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" From="360" To="0" RepeatBehavior="Forever" Duration="0:0:3"></DoubleAnimation></Storyboard></BeginStoryboard></EventTrigger><EventTrigger RoutedEvent="Unloaded"><StopStoryboard BeginStoryboardName="loadAnimation"></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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的WPF 蒙罩层 LoadingPage的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久瑟瑟 | 99国产精| 国产又黄又 | 人人爱超碰 | 91精品国产自产精品男人的天堂 | 亲嘴脱内衣内裤 | 丝袜视频一区 | 日本理论片午伦夜理片在线观看 | 韩国av电影网站 | 少妇久久久久久被弄到高潮 | 一区国产精品 | 72种无遮挡啪啪的姿势 | 久久这里只有精品9 | 扶她futa粗大做到怀孕 | 欧美18一20男同69gay | 亚洲国产日韩在线一区 | 免费在线观看av | 欧美午夜理伦三级在线观看 | 草草草在线视频 | 丁香激情网 | 激情偷乱人成视频在线观看 | 国产h视频| 亚洲国产高清国产精品 | 久久av片| 国产伦精品一区二区三区视频网站 | 香蕉大久久 | 久久网一区二区 | 新婚夫妇白天啪啪自拍 | 亚洲av无码一区二区二三区 | 青青草在线视频免费观看 | 国产精品国色综合久久 | 色悠悠网 | 加勒比在线一区 | 亚洲欧美一区二区激情 | 亚洲成人基地 | 欧美精品久久久久久久久老牛影院 | 久久97视频 | 欧美黄色大片免费观看 | 亚洲永久精品一区二区 | 人人草在线观看 | 秋霞国产| 欧美一区二区不卡视频 | 亚洲精品高潮久久久久久久 | 熊猫电影yy8y全部免费观看 | www,五月天,com | 婷婷久久一区 | 成人免费一级视频 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 潮喷失禁大喷水无码 | 天天天干| 久久中文字幕视频 | 欧美xxxxav| 国产女主播一区二区 | 久久精视频| 星空大象mv高清在线观看免费 | a级免费观看| 精品香蕉一区二区三区 | av一区在线播放 | 蜜桃无码一区二区三区 | 久久爱成人 | 四虎影视永久免费观看 | 中文字幕视频观看 | 91九色蝌蚪porny| 日韩网站视频 | 欧美精品日韩在线观看 | 亚洲第一黄色网址 | 久久riav| 国产aⅴ | 欧美大片免费观看网址 | 色先锋在线 | av漫画在线观看 | 奇米影视奇米色 | 成年人高清视频 | 欧美性生活一区二区 | av免费的 | 亚洲成a人片在线www | 色哟哟在线免费观看 | 乳揉みま痴汉4在线播放 | 91水蜜桃| 国产精品久久久久久久久免费相片 | 中国女人内谢69xxxx免费视频 | 亚洲国产精彩视频 | 尤物视频最新网址 | www.av日韩| 俄罗斯精品一区二区三区 | 在线日韩视频 | 亚洲另类自拍 | 日韩免费黄色片 | 国产在线a视频 | 91视频免费观看 | 伊人狠狠操 | 国产日韩亚洲 | 亚洲成av人片在线观看无 | 欧美日韩性生活视频 | 中文字幕日韩欧美一区二区三区 | 久久久久久999 | 国产视频久久久 | 欧美黄色一级 | 国产精品不卡 |