前面写了个简单的实现(http://blog.csdn.net/yysyangyangyangshan/article/details/9280439),不过效果不太好,各个点之间没有连接起来。这里增加连接各个按键。
其他代码不变,只改动PatternPasswordKeyboard类。

 /// <summary>     /// PatternPasswordKeyboard.xaml 的交互逻辑     /// </summary>     public partial class PatternPasswordKeyboard : UserControl     {         public string password = string.Empty;//最终密码           private bool isMouseDonw = false;//控制只有鼠标按下的滑动才有效           private List<KeyButton> keyButtons = new List<KeyButton>();//密码所在的控件           private List<Point> points = new List<Point>();           public PatternPasswordKeyboard()         {             InitializeComponent();               this.MouseUp += new MouseButtonEventHandler(MainWindow_MouseUp);               this.MouseDown += new MouseButtonEventHandler(MainWindow_MouseDown);         }           /// <summary>         /// 重置         /// </summary>         internal void PatternPasswordKeyboard_ResetPassword()         {             this.points.Clear();               this.password = string.Empty;               foreach (KeyButton item in keyButtons)             {                 item.SelfBacground = new SolidColorBrush(Colors.Transparent);             }               this.InvalidateVisual();         }           void MainWindow_MouseDown(object sender, MouseButtonEventArgs e)         {             points.Clear();               PatternPasswordKeyboard_ResetPassword();               isMouseDonw = true;         }           void MainWindow_MouseUp(object sender, MouseButtonEventArgs e)         {             isMouseDonw = false;         }           private void BorderMouseMove(object sender, MouseEventArgs e)         {             if (!isMouseDonw)             {                 return;             }               KeyButton border = sender as KeyButton;               if (border == null)             {                 return;             }               string key = border.Tag.ToString();               if (string.IsNullOrEmpty(key))             {                 return;             }               border.SelfBacground = new SolidColorBrush(Colors.Blue);               keyButtons.Add(border);               //将滑过的点保存起来             if (!password.Contains(key))             {                 password += key;                   GeneralTransform generalTransform = border.ellipseBorder.TransformToAncestor(this);                   Point point = generalTransform.Transform(this.TranslatePoint(new Point(0,0),this));                   points.Add(point);                   this.InvalidateVisual();             }         }           protected override void OnRender(DrawingContext drawingContext)         {             base.OnRender(drawingContext);               if (points.Count < 2)             {                 return;             }             //使用画复合图形画出已经保存的点             Pen p = new Pen(new SolidColorBrush(Colors.Red), 10);               GeometryGroup group = new GeometryGroup();               group.FillRule = FillRule.EvenOdd;               LineGeometry myLineGeometry = null;               for (int i = 0; i < points.Count;i++ )             {                 if (i % 2 == 0)                 {                     if (myLineGeometry != null)                     {                         myLineGeometry.EndPoint = points[i];                     }                       myLineGeometry = new LineGeometry();                       myLineGeometry.StartPoint = points[i];                 }                 else                 {                     myLineGeometry.EndPoint = points[i];                       group.Children.Add(myLineGeometry);                       if (i + 1 < points.Count)                     {                         myLineGeometry = new LineGeometry();                           myLineGeometry.StartPoint = points[i];                           group.Children.Add(myLineGeometry);                     }                     else                     {                         myLineGeometry = null;                     }                 }             }               SolidColorBrush mySolidColorBrush = new SolidColorBrush();               drawingContext.DrawGeometry(mySolidColorBrush, new Pen(Brushes.Green, 10), group);         }     }

效果图:

代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5727105

WPF-21:WPF实现仿安卓的图案密码键盘(改进)相关推荐

  1. WPF-21:WPF实现仿安卓的图案密码键盘(初级)

    希望大家有这方面好的代码给提供下,谢谢了! 想用C#做一个和手机上一样的图形密码键盘,貌似这方面资料比较少,虽然winphone手机上也有但是网上也没有这方面的代码.只好用常规的思维去实现一下,当然是 ...

  2. WPF系列教程——(一)仿TIM QQ界面 - 简书

    WPF系列教程--(一)仿TIM QQ界面 - 简书 原文: WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM ...

  3. 【WPF】WPF 常用控件

    目录 一.WPF的概述 1.1 WPF 简介 1.2 WPF 特点 二.XAML 2.1 对象元素语法 2.2 XAML 根元素 2.3 WPF 和 XAML 命名空间声明 三.控件的继承关系 四.常 ...

  4. android os仿ios,安卓仿ios12桌面全套仿安卓完美版

    详情 安卓仿ios12桌面全套仿安卓完美版,苹果系统的仿安卓系统工具,使用便捷,安卓手机也能体验苹果系统,从桌面.主题.UI.系统内的各种细节轻松体验效果,画面流畅轻松使用启动器操作使用,喜欢的朋友快 ...

  5. android屏幕解锁图案,安卓手机图案屏幕锁解锁方法!!

    当你的安卓手机密码锁忘记了怎么办?今天一不小心把手机改了图案锁结果由于改的时候匆忙结果忘记了,在网上找了好多方法都无果,也有人说重新刷机就会好!!这个简直就是废话,刷机当然能好了!! 关键是解锁要解决 ...

  6. java写脸萌_FaceLovely 本项目是一个仿安卓脸萌app应用的源码, 款非常有趣的拼脸软件,即使你不会画 android 259万源代码下载- www.pudn.com...

    文件名称: FaceLovely下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 6940 KB 上传时间: 2016-05-25 下载次数: 0 详细说明:本项 ...

  7. 仿ios桌面vivo_安卓仿ios12桌面全套仿安卓完美版

    详情 安卓仿ios12桌面全套仿安卓完美版是一款非常好用的苹果系统仿造安卓软件工具,这款软件使用起来非常简单,用户在安卓手机上也能体验到苹果系统了,完全深度的复刻了Ios14系统,感兴趣的小伙伴一起来 ...

  8. 高仿精仿安卓疯狂猜图游戏源码

    给大家分享一款不错的高仿精仿安卓疯狂猜图游戏源码,喜欢的朋友可以下载看看. 游戏 <ignore_js_op> 源码下载 http://code.662p.com/view/2960.ht ...

  9. 电话拨号界面 android,仿安卓手机拨号界面按键特效

    仿安卓手机拨号界面按键特效 $(document).ready(function() { /Current Tab/ $('.phone-tabs li a').click(function() { ...

  10. 052仿安卓.9图实现Div模拟blockly风格的办法

    052仿安卓.9图实现Div模拟blockly风格的办法 .9图的介绍 格式 .9图的后缀格式为:.9.png 作用 .9图可以进行拉伸,如水平.竖直方向的延长,而清晰度不变. 令一张图片实现多种拉伸 ...

最新文章

  1. 服务器安全设置之--硬盘权限篇
  2. Linux系统服务器如何禁ping
  3. 004_CSS元素选择器
  4. Java语言基础(数组)
  5. MySQL事务的可串行化
  6. Microsoft WPF VS Adobe Apollo
  7. 判断 JS 中对象的类型
  8. 安装sendmail
  9. struts1.3.8与hibernate3.2.5整合所遇到的问题
  10. IT女性必备——5个方法变身小腰精
  11. 百度地图之添加控件——比例尺、缩略图、平移缩放
  12. 关于信息安全工作方法论的一点猜想
  13. 特朗普“能源独立”政策效果存疑
  14. 安卓智能手机运行iFIX组态软件
  15. Carrot2 - Wikipedia, the free encyclopedia
  16. 深入学习软件测试:混合正交表工具
  17. IP模拟工具modify header
  18. ps不更改原图比例,调整图片至任意尺寸
  19. 罗技无线网卡linux,Linux(Ubuntu)装罗技LMS避坑指南
  20. 哈工大计算机系名单,哈工大计算机学部公布拟录取名单,计算机科学与技术仅录29人!...

热门文章

  1. 16位顶尖对冲基金大佬:畅谈量化投资的下个10年!
  2. 安武:被刷屏的德勤财务机器人(RPA)到底是什么?
  3. 一文读懂:云上用户如何灵活应用定制化网络服务
  4. Linux宝库幕后推手齐聚OpenInfra Days China
  5. 原创 | 基于开源的互联网和深度信息技术
  6. 【优化算法】大鼠群优化器算法(RSO)【含Matlab源码 1837期】
  7. 【优化调度】基于matlab蚁群算法求解无等待流水线调度优化问题【含Matlab源码 1516期】
  8. 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
  9. 【虹膜识别】基于matlab GUI滤波器虹膜识别【含Matlab源码 917期】
  10. lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...