欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于WPF實現(xiàn)驗證碼控件

 更新時間:2022年08月02日 11:09:32   作者:驚鏵  
這篇文章主要介紹了如何利用WPF實現(xiàn)一個簡單的驗證碼控件,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下

代碼如下

一、創(chuàng)建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>

效果預覽

源碼地址如下

Github:https://github.com/WPFDevelopersOrg

Gitee:https://gitee.com/WPFDevelopersOrg

以上就是基于WPF實現(xiàn)驗證碼控件的詳細內(nèi)容,更多關(guān)于WPF驗證碼控件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論