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

前面写了个简单的实现( 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值