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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

WPF 实现验证码控件

發布時間:2023/12/4 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 实现验证码控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WPF開發者QQ群

此群已滿340500857?,請加新群458041663

?? ??? 由于微信群人數太多入群請添加小編微信號

?yanjinhuawechatW_Feng_aiQ?邀請入群

?需備注WPF開發者?

01

代碼如下

一、創建CheckCode.xaml代碼如下。

<ResourceDictionary?xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:controls="clr-namespace:WPFDevelopers.Controls"><ResourceDictionary.MergedDictionaries><ResourceDictionary?Source="Basic/ControlBasic.xaml"/></ResourceDictionary.MergedDictionaries><Style?TargetType="{x:Type?controls:CheckCode}"?BasedOn="{StaticResource?ControlBasicStyle}"><Setter?Property="Background"?Value="{x:Null}"/><Setter?Property="Width"?Value="100"/><Setter?Property="Height"?Value="40"/><Setter?Property="Cursor"?Value="Hand"/><Setter?Property="Template"><Setter.Value><ControlTemplate?TargetType="{x:Type?controls:CheckCode}"><Image?x:Name="PART_Image"?Stretch="Fill"?Source="{TemplateBinding?ImageSource}"/></ControlTemplate></Setter.Value></Setter></Style> </ResourceDictionary>

二、CheckCode.cs代碼如下。

using?System; using?System.Windows; using?System.Windows.Controls; using?System.Windows.Input; using?System.Windows.Media; using?System.Windows.Media.Imaging;namespace?WPFDevelopers.Controls {[TemplatePart(Name?=?ImageTemplateName,?Type?=?typeof(Image))]public?class?CheckCode?:?Control{private?const?string?ImageTemplateName?=?"PART_Image";private?Image?_image;private?Size?_size?=?new?Size(70,?23);private?const?string?strCode?=?"abcdefhkmnprstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";?public?static?readonly?DependencyProperty?ImageSourceProperty?=?DependencyProperty.Register("ImageSource",?typeof(ImageSource),?typeof(CheckCode),new?PropertyMetadata(null));///?<summary>///?隨機生成的驗證碼///?</summary>public?ImageSource?ImageSource{get?{?return?(ImageSource)GetValue(ImageSourceProperty);?}set?{?SetValue(ImageSourceProperty,?value);?}}///?<summary>///?字體顏色///?</summary>public?Brush?SizeColor{get?{?return?(Brush)GetValue(SizeColorProperty);?}set?{?SetValue(SizeColorProperty,?value);?}}public?static?readonly?DependencyProperty?SizeColorProperty?=DependencyProperty.Register("SizeColor",?typeof(Brush),?typeof(CheckCode),?new?PropertyMetadata(DrawingContextHelper.Brush));public?CheckCode(){this.Loaded?+=?CheckCode_Loaded;}private?void?CheckCode_Loaded(object?sender,?RoutedEventArgs?e){ImageSource?=?CreateCheckCodeImage(CreateCode(4),?(int)this.ActualWidth,?(int)this.ActualHeight);}public?override?void?OnApplyTemplate(){base.OnApplyTemplate();_image?=?GetTemplateChild(ImageTemplateName)?as?Image;if?(_image?!=?null)_image.PreviewMouseDown?+=?_image_PreviewMouseDown;}private?void?_image_PreviewMouseDown(object?sender,?MouseButtonEventArgs?e){if?(!IsLoaded)return;ImageSource?=?CreateCheckCodeImage(CreateCode(4),?(int)this.ActualWidth,?(int)this.ActualHeight);}private?string?CreateCode(int?strLength){var?_charArray?=?strCode.ToCharArray();var?randomCode?=?"";int?temp?=?-1;Random?rand?=?new?Random(Guid.NewGuid().GetHashCode());for?(int?i?=?0;?i?<?strLength;?i++){if?(temp?!=?-1)rand?=?new?Random(i?*?temp?*?((int)DateTime.Now.Ticks));int?t?=?rand.Next(strCode.Length?-?1);if?(!string.IsNullOrWhiteSpace(randomCode)){while?(randomCode.ToLower().Contains(_charArray[t].ToString().ToLower()))t?=?rand.Next(strCode.Length?-?1);}if?(temp?==?t)return?CreateCode(strLength);temp?=?t;randomCode?+=?_charArray[t];}return?randomCode;}private?ImageSource?CreateCheckCodeImage(string?checkCode,?int?width,?int?height){if?(string.IsNullOrWhiteSpace(checkCode))return?null;if?(width?<=?0?||?height?<=?0)return?null;var?drawingVisual?=?new?DrawingVisual();var?random?=?new?Random(Guid.NewGuid().GetHashCode());using?(DrawingContext?dc?=?drawingVisual.RenderOpen()){dc.DrawRectangle(Brushes.White,?new?Pen(SizeColor,?1),?new?Rect(_size));var?formattedText?=?DrawingContextHelper.GetFormattedText(checkCode,color:SizeColor,?flowDirection:?FlowDirection.LeftToRight,textSize:20,?fontWeight:?FontWeights.Bold);dc.DrawText(formattedText,?new?Point((_size.Width?-?formattedText.Width)?/?2,?(_size.Height?-?formattedText.Height)?/?2));for?(int?i?=?0;?i?<?10;?i++){int?x1?=?random.Next(width?-?1);int?y1?=?random.Next(height?-?1);int?x2?=?random.Next(width?-?1);int?y2?=?random.Next(height?-?1);dc.DrawGeometry(Brushes.Silver,?new?Pen(Brushes.Silver,?0.5D),?new?LineGeometry(new?Point(x1,?y1),?new?Point(x2,?y2)));}for?(int?i?=?0;?i?<?100;?i++){int?x?=?random.Next(width?-?1);int?y?=?random.Next(height?-?1);SolidColorBrush?c?=?new?SolidColorBrush(Color.FromRgb((byte)random.Next(0,?255),?(byte)random.Next(0,?255),?(byte)random.Next(0,?255)));dc.DrawGeometry(c,?new?Pen(c,?1D),?new?LineGeometry(new?Point(x?-?0.5,?y?-?0.5),?new?Point(x?+?0.5,?y?+?0.5)));}dc.Close();}var?renderBitmap?=?new?RenderTargetBitmap(70,?23,?96,?96,?PixelFormats.Pbgra32);renderBitmap.Render(drawingVisual);return?BitmapFrame.Create(renderBitmap);}} }

三、新建CheckCodeExample.cs代碼如下。

<UserControl?x:Class="WPFDevelopers.Samples.ExampleViews.CheckCodeExample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"?xmlns:d="http://schemas.microsoft.com/expression/blend/2008"?xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"mc:Ignorable="d"?d:DesignHeight="450"?d:DesignWidth="800"><UniformGrid?Rows="2"?Columns="2"><wpfdev:CheckCode?SizeColor="LimeGreen"/><wpfdev:CheckCode?SizeColor="Red"/><wpfdev:CheckCode?SizeColor="DodgerBlue"/><wpfdev:CheckCode?SizeColor="HotPink"/></UniformGrid> </UserControl>

02


效果預覽

鳴謝素材提供者 - 屈越

源碼地址如下

Github:https://github.com/WPFDevelopersOrg

Gitee:https://gitee.com/WPFDevelopersOrg

WPF開發者QQ群:?340500857?|?458041663

Github:https://github.com/WPFDevelopersOrg

出處:https://www.cnblogs.com/yanjinhua

版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。

轉載請著名作者 出處 https://github.com/WPFDevelopersOrg

掃一掃關注我們,

更多知識早知道!

點擊閱讀原文可跳轉至源代碼

總結

以上是生活随笔為你收集整理的WPF 实现验证码控件的全部內容,希望文章能夠幫你解決所遇到的問題。

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