[.NET] 在WPF中實現TextBox只能輸入數字

來源:互聯網
上載者:User

標籤:

如題,實現此功能的方法有很多,如果使用的是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);        }    }}

如何調用:

<TextBox local:TextBoxOnlyAcceptFigureBehavior.IsOnlyAcceptFigure="True"/>

PS:驗證輸入的代碼來自於網路,再次謝謝網友的分享。

祝大家生活愉快!

 

[.NET] 在WPF中實現TextBox只能輸入數字

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.