WPF 当地生成验证码

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

1、效果如下图,点击图片可更新验证码(其实图片就是一个Button的背景图)。

2、主要使通过用户控件创建,UCVerificationCode.xaml代码如下。
  1. <UserControl x:Class="UC.UCVerificationCode"
  2.              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6.              xmlns:local="clr-namespace:RegisterWPF.UC"
  7.              xmlns:hc="https://handyorg.github.io/handycontrol"
  8.              mc:Ignorable="d"
  9.              Width="Auto"
  10.              Height="Auto" Loaded="UCVerificationCode_OnLoaded">
  11.     <Grid>     
  12.         <Button x:Name="btnVerificationCode" Width="100" Height="40" BorderThickness="0" Click="BtnVerificationCode_OnClick"/>
  13.     </Grid>
  14. </UserControl>
复制代码
3、UCVerificationCode.xaml.cs代码如下。
  1.     /// <summary>
  2.     /// UCVerificationCode.xaml 的交互逻辑
  3.     /// </summary>
  4.     public partial class UCVerificationCode : UserControl
  5.     {
  6.         public string VerificationCode { get; set; }
  7.         public UCVerificationCode()
  8.         {
  9.             InitializeComponent();
  10.         }
  11.         /// <summary>
  12.         /// 用户控件加载完成
  13.         /// </summary>
  14.         /// <param name="sender"></param>
  15.         /// <param name="e"></param>
  16.         private void UCVerificationCode_OnLoaded(object sender, RoutedEventArgs e)
  17.         {
  18.             GetVerificationCode();
  19.         }
  20.         /// <summary>
  21.         /// 获取验证码
  22.         /// </summary>
  23.         public void GetVerificationCode()
  24.         {
  25.             using (MemoryStream outStream = new MemoryStream())
  26.             {
  27.                 Bitmap bitmap = CreateVerificationCode(out string code);
  28.                 bitmap.Save(outStream, ImageFormat.Bmp);
  29.                 BitmapImage bitmapImage = new BitmapImage();
  30.                 bitmapImage.BeginInit();
  31.                 bitmapImage.StreamSource = new MemoryStream(outStream.ToArray());
  32.                 bitmapImage.EndInit();
  33.                 ImageBrush imgBrush = new ImageBrush(bitmapImage);
  34.                 btnVerificationCode.Background = imgBrush;
  35.                 VerificationCode = code;
  36.                 Debug.WriteLine(code);
  37.                 Debug.WriteLine(VerificationCode);
  38.             }
  39.         }
  40.         /// <summary>
  41.         /// 生成验证码图片
  42.         /// </summary>
  43.         /// <param name="code"></param>
  44.         /// <returns></returns>
  45.         public static Bitmap CreateVerificationCode(out string code)
  46.         {
  47.             //建立Bitmap对象,绘图
  48.             Bitmap bitmap = new Bitmap(200, 60);
  49.             Graphics graph = Graphics.FromImage(bitmap);
  50.             graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, 200, 60);
  51.             Font font = new Font(System.Drawing.FontFamily.GenericSansSerif,  48,System.Drawing.FontStyle.Bold, GraphicsUnit.Pixel);
  52.             Random r = new Random();
  53.             string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789";
  54.             StringBuilder sb = new StringBuilder();
  55.             //添加随机的五个字母
  56.             for (int x = 0; x < 4; x++)
  57.             {
  58.                 string letter = letters.Substring(r.Next(0, letters.Length - 1), 1);
  59.                 sb.Append(letter);
  60.                 graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));
  61.             }
  62.             code = sb.ToString();
  63.             //混淆背景
  64.             Pen linePen = new Pen(new SolidBrush(Color.Black), 2);
  65.             for (int x = 0; x < 6; x++)
  66.                 graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
  67.             return bitmap;
  68.         }
  69.         /// <summary>
  70.         /// 刷新验证码
  71.         /// </summary>
  72.         /// <param name="sender"></param>
  73.         /// <param name="e"></param>
  74.         private void BtnVerificationCode_OnClick(object sender, RoutedEventArgs e)
  75.         {
  76.             GetVerificationCode();
  77.         }
  78.     }
复制代码
4、引用时。
  1. <localuc:UCVerificationCode VerticalAlignment="Center" HorizontalContentAlignment="Center" Margin="0" Padding="0" BorderThickness="0"/>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表