Silverlight 限制 规则输入(正整数或小数)的另一种“技巧”写法

今天上午纠结一个问题很久,silverlight TextBox限制用户规则输入,要求只能输入正整数或则小数,小数点只能有且只有一个

刚开始的时候就是想直接用keyDown事件里面来解决

   voidtxtParData_KeyDown(objectsender, KeyEventArgse) {

            TextBoxtxt=senderasTextBox;

            if (txt.Text.Length>=10) {

                e.Handled=true;

            }else

            {

                //屏蔽非数字按键,只能输入小数,e.handledtrue时代表没有录入,为false时代表已录入

                if ((e.Key>=Key.NumPad0&&e.Key<=Key.NumPad9) || (e.Key>=Key.D0&&e.Key<=Key.D9) ||e.Key==Key.Unknown||e.Key==Key.Decimal) {

                    if (txt.Text.Contains(".") &&e.Key==Key.Decimal) {

                        e.Handled=true;

                        return;

                    }

                    e.Handled=false;

                }

                else{

                    e.Handled=true;

                }

            }

}

发现这个根本不能满足要求,于是去找各种正则,进行匹配,依然不够好,纠结半天,最后老大一个点子,说这个可以再TextChanged 进行解决,才发现自己绕了很多弯路,代码

voidtxtParData_TextChanged(objectsender, TextChangedEventArgse) {

            if ((senderasTextBox).Text.Length>0 ) {

                doublesPEED;

                if (!Double.TryParse((senderasTextBox).Text,outsPEED)||(senderasTextBox).Text.Length>10) {

                    (senderasTextBox).Text= (senderasTextBox).Text.Substring(0, (senderasTextBox).Text.Length-1);

                    (senderasTextBox).SelectionStart= (senderasTextBox).Text.Length;

                }

            }

        }

Double.TryParse//将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。

今天第一次用,发现这个真是一个好东东,轻易解决我纠结2个多小时的东西。。。

学艺不精,不懂的太多了,慢慢学,一点点进步...