zoukankan      html  css  js  c++  java
  • WPF中将password非依赖属性转化为依赖属性

    1封装一个PasswordBoxBindingHelper

    public static class PasswordBoxBindingHelper
        {
            public static bool GetIsPasswordBindingEnabled(DependencyObject obj)
            {
                return (bool)obj.GetValue(IsPasswordBindingEnabledProperty);
            }
    
            public static void SetIsPasswordBindingEnabled(DependencyObject obj, bool value)
            {
                obj.SetValue(IsPasswordBindingEnabledProperty, value);
            }
    
            public static readonly DependencyProperty IsPasswordBindingEnabledProperty =
                DependencyProperty.RegisterAttached("IsPasswordBindingEnabled", typeof(bool),
                typeof(PasswordBoxBindingHelper),
                new UIPropertyMetadata(false, OnIsPasswordBindingEnabledChanged));
    
            private static void OnIsPasswordBindingEnabledChanged(DependencyObject obj,DependencyPropertyChangedEventArgs e)
            {
                var passwordBox = obj as PasswordBox;
    
                if (passwordBox != null)
                {
                    passwordBox.PasswordChanged -= PasswordBoxPasswordChanged;
    
                    if ((bool)e.NewValue)
                    {
                        passwordBox.PasswordChanged += PasswordBoxPasswordChanged;
                    }
    
                }
            }
    
            //when the passwordBox's password changed, update the buffer
            static void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e)
            {
                var passwordBox = (PasswordBox)sender;
    
                if (!String.Equals(GetBindedPassword(passwordBox), passwordBox.Password))
                {
                    SetBindedPassword(passwordBox, passwordBox.Password);
                }
            }
    
    
            public static string GetBindedPassword(DependencyObject obj)
            {
                return (string)obj.GetValue(BindedPasswordProperty);
            }
    
    
            public static void SetBindedPassword(DependencyObject obj, string value)
            {
                obj.SetValue(BindedPasswordProperty, value);
            }
    
            public static readonly DependencyProperty BindedPasswordProperty =
                DependencyProperty.RegisterAttached("BindedPassword", typeof(string),
                typeof(PasswordBoxBindingHelper),
                new UIPropertyMetadata(string.Empty, OnBindedPasswordChanged));
    
            //when the buffer changed, upate the passwordBox's password
            private static void OnBindedPasswordChanged(DependencyObject obj,
                                                        DependencyPropertyChangedEventArgs e)
            {
                var passwordBox = obj as PasswordBox;
                if (passwordBox != null)
                {
                    passwordBox.Password = e.NewValue == null ? string.Empty : e.NewValue.ToString();
                }
            }
    
        }

    2界面XAML进行属性绑定

    <PasswordBox  Helpers:PasswordBoxBindingHelper.IsPasswordBindingEnabled="True"  Grid.Row="4" Grid.Column="1" Height="27" Margin="208,6.6,213.6,6.4"
                         Helpers:PasswordBoxBindingHelper.BindedPassword=
                         "{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" 
                          PasswordChanged="TxtPassword_PasswordChanged"/>
  • 相关阅读:
    BZOJ 3669 & luogu 2387 魔法森林
    caioj 2064 & POJ 1741 & CH 0x40数据结构进阶(0x45 点分治)例题1:树
    caioj 2063& CH 0x40数据结构进阶(0x44 分块)例题4:小Z的袜子
    BZOJ 2154: Crash的数字表格
    追查坏牛奶(最大流)
    [JLOI2014]松鼠的新家
    [HAOI2015]树上操作
    [NOI2015]软件包管理器(树链刨分)
    [JSOI2008]球形空间产生器(高斯消元)
    [ZJOI2008]树的统计(树链刨分)
  • 原文地址:https://www.cnblogs.com/dujian123/p/10953969.html
Copyright © 2011-2022 走看看