[.NET] 在WPF中实现TextBox只能输入数字
2021-09-29 23:13
标签:如题,实现此功能的方法有很多,如果使用的是MVVM的开发模式,该如何实现此功能? 很简单,为TextBox新建一个附加属性,就可以完美的解决此问题。 新建一个附件属性 IsOnlyAcceptFigure ,并为其添加属性回调函数即可。 代码如下: namespace WPF.Validation { public class TextBoxOnlyAcceptFigureBehavior { public static readonly DependencyProperty IsOnlyAcceptFigureProperty = DependencyProperty.RegisterAttached("IsOnlyAcceptFigure", typeof (bool), typeof (TextBoxOnlyAcceptFigureBehavior), new UIPropertyMetadata(false, OnBindedPasswordChanged)); public static bool GetIsOnlyAcceptFigure(DependencyObject obj) { return (bool) obj.GetValue(IsOnlyAcceptFigureProperty); } public static void SetIsOnlyAcceptFigure(DependencyObject obj, bool value) { obj.SetValue(IsOnlyAcceptFigureProperty, value); } private static void OnBindedPasswordChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { var textBox = obj as TextBox; if (textBox == null) return; if ((bool) e.NewValue) { textBox.PreviewTextInput += textBox_PreviewTextInput; textBox.PreviewKeyDown += textBox_PreviewKeyDown; DataObject.AddPastingHandler(textBox, textBox_Pasting); } else { textBox.PreviewTextInput -= textBox_PreviewTextInput; textBox.PreviewKeyDown -= textBox_PreviewKeyDown; DataObject.RemovePastingHandler(textBox, textBox_Pasting); } } private static void textBox_Pasting(object sender, DataObjectPastingEventArgs e) { if (e.DataObject.GetDataPresent(typeof (string))) { var text = (string) e.DataObject.GetData(typeof (string)); if (!IsNumberic(text)) { e.CancelCommand(); } } else { e.CancelCommand(); } } private static void textBox_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Space) e.Handled = true; } private static void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !IsNumberic(e.Text); } public static bool IsNumberic(string _string) { if (string.IsNullOrEmpty(_string)) return false; return _string.All(char.IsDigit); } } } 如何调用: PS:验证输入的代码来自于网络,再次谢谢网友的分享。 祝大家生活愉快! [.NET] 在WPF中实现TextBox只能输入数字标签:原文地址:http://www.cnblogs.com/sela/p/4777506.html
上一篇:轮询、长轮询、长连接、socket连接、WebSocket
下一篇:C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
文章标题:[.NET] 在WPF中实现TextBox只能输入数字
文章链接:http://soscw.com/essay/108232.html