关于wpf控件的textbox只允许输入整数,小数,且只能允许输入一位小数点

public class CustomTextBoxl:TextBox
{
public CustomTextBox()
{
PreviewTextInput += TextBoxControl_PreviewTextInput;
DataObject.AddPastingHandler(this, Pasting_Text);
}

    //限制非法字符输入,只允许输入数字和小数点
    private void TextBoxControl_PreviewTextInput(object sender,
        TextCompositionEventArgs e)
    {
        var textBox = sender as TextBox;
        //这是对中文值的判断
        if(textBox==null)return;
        //if (Regex.IsMatch(textBox.Text, @"[\u4e00-\u9fbb]+$"))
        //{
         //   textBox.Text = "";
         //   e.Handled = true;
          //  return;
        //}
        //匹配只能输入一个小数点的浮点数
     Regex numbeRegex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
        e.Handled =
                !numbeRegex.IsMatch(
                    textBox.Text.Insert(
                        textBox.SelectionStart, e.Text));
        textBox.Text = textBox.Text.Trim();
    }

    /// 
    /// 键盘输入值事件(可以小键盘上的数字键和英文输入状态下的句点键盘)
    /// 
    /// 
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 &&
             e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
            ||
            (e.Key >= Key.D0 && e.Key <= Key.D9 &&
             e.KeyboardDevice.Modifiers != ModifierKeys.Shift) ||
            e.Key == Key.Back || e.Key == Key.Left || e.Key == Key.Right ||
            e.Key == Key.Enter || e.Key == Key.Decimal ||
            e.Key == Key.OemPeriod)
        {
            if (e.KeyboardDevice.Modifiers != ModifierKeys.None)
            {
                e.Handled = false;
            }
        }
        else
        {
            e.Handled = true;
        }
    }

    /// 
    ///  禁止粘贴
    /// 
    /// 
    /// 
    private void v_Text_(object sender, DataObjectPastingEventArgs e)
    {
        e.CancelCommand();
    }
}

你可能感兴趣的:(关于wpf控件的textbox只允许输入整数,小数,且只能允许输入一位小数点)