• wpf 附加属性样例代码


    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.Text.RegularExpressions;

    namespace zl_screensaver
    {
        public static class TextBoxExtensions
        {
            public static readonly DependencyProperty IsNumericProperty =
                DependencyProperty.RegisterAttached("IsNumeric", typeof(bool), typeof(TextBoxExtensions),
                    new PropertyMetadata(false, OnIsNumericChanged));

            public static bool GetIsNumeric(DependencyObject obj)
            {
                return (bool)obj.GetValue(IsNumericProperty);
            }

            public static void SetIsNumeric(DependencyObject obj, bool value)
            {
                obj.SetValue(IsNumericProperty, value);
            }

            private static void OnIsNumericChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                TextBox textBox = d as TextBox;
                if (textBox == null) return;

                if ((bool)e.NewValue)
                {
                    textBox.PreviewTextInput += TextBox_PreviewTextInput;
                    DataObject.AddPastingHandler(textBox, OnPaste);
                    InputMethod.SetIsInputMethodEnabled(textBox, false); // 禁用输入法
                }
                else
                {
                    textBox.PreviewTextInput -= TextBox_PreviewTextInput;
                    DataObject.RemovePastingHandler(textBox, OnPaste);
                    InputMethod.SetIsInputMethodEnabled(textBox, true); // 启用输入法
                }
            }

            private static void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
            {
                if (!IsTextNumeric(e.Text))
                {
                    e.Handled = true;
                }
            }

            private static void OnPaste(object sender, DataObjectPastingEventArgs e)
            {
                if (e.DataObject.GetDataPresent(typeof(string)))
                {
                    string text = (string)e.DataObject.GetData(typeof(string));
                    if (!IsTextNumeric(text))
                    {
                        e.CancelCommand();
                    }
                }
                else
                {
                    e.CancelCommand();
                }
            }

            private static bool IsTextNumeric(string text)
            {
                Regex regex = new Regex("[^0-9]+"); // 只允许数字
                return !regex.IsMatch(text);
            }
        }
    }
     

  • 相关阅读:
    考证必看 | PMP扫盲贴+PMP材料
    iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法
    你有了解过这些架构设计,架构知识体系吗?(架构书籍推荐)
    干货 | 测试人职场晋升“潜规则”:15 年经验资深测试经理的职场忠告
    【学生管理系统】权限管理之角色管理—查询所有角色并给角色授予权限(菜单)
    看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
    应届女生美团 Java 岗 4 面,一次性斩 offfer,我受到了万点暴击
    <C++>初识STL —— 标准模板库
    测开 (Junit 单元测试框架)
    聊聊JDK1.0到JDK20的那些事儿
  • 原文地址:https://blog.csdn.net/zhang8593/article/details/139438168