如何让WPF TextBox关注小数点?

时间:2013-02-25 13:13:37

标签: c# wpf textbox

所以我有TextBox只允许数字和小数点。我希望只允许用户输入1个小数点。

以下是PreviewTextInput事件触发的代码:(某些代码有点多余,但它可以完成工作)

    private void PreviewTextInput(object sender, TextCompositionEventArgs e)
    {

        TextBox textBox = (TextBox)sender;

        if (e.Text == ".")
        {

            if (textBox.Text.Contains("."))
            {

                e.Handled = true;
                return;

            }

            else
            {
                //Here I am attempting to add the decimal point myself
                textBox.Text = (textBox.Text + ".");
                e.handled = true;
                return;

            }

        }
        else
        {
            e.Handled = !IsTextAllowed(e.Text);
            return;
        }
    }

    private static bool IsTextAllowed(string text)
    {
        Regex regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text
        return !regex.IsMatch(text);
    }

问题是输入的第一个小数点不是“重要”,直到后跟一个数字。因此,如果用户输入123.并且您要设置breakpoint并检查textBox.text的值,那么它将是123。我知道这种情况正在发生,因为textBox绑定到Double所以它试图“聪明”并忘记那些当前“无关紧要”的值(“。”)。

我的代码应该没有任何问题,我只是希望强制textBox希望跳过一些不必要的(?)自动格式化。

有没有办法让textBox“关注”第一个小数点?

Possible Duplicate从未接听过。

*是否存在限制小数位数的不同方法?“(我在这方面做了很多研究,我认为还没有其他选择。)

2 个答案:

答案 0 :(得分:0)

如果只是限制你想要的字符,也许类似于字符串格式的绑定就可以满足你的需求

here是double

格式的一个很好的例子

这将是在代码中绑定到ViewModel

的示例
    <TextBox Text="{Binding LimitedDouble,StringFormat={}{0:00.00}}"></TextBox>

答案 1 :(得分:0)

private void txtDecimal_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!Char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && e.KeyChar!='.')
    {
        e.Handled = true;
    }
    if (e.KeyChar == '.' && txtDecimal.Text.Contains("."))
    {
        e.Handled = true;
    }
}