c# - 如何在文本框上只接受数字和单个句点

标签 c# .net wpf string textbox

我有一个数据绑定(bind)的 WPF 文本框。我需要限制文本框上的用户输入,以便它只接受数字和单个句点(用于显示小数)。

我知道我可以用“Winforms”方式处理这个问题并验证 KeyPress 事件上的每个输入,但我想知道在 WPF 中是否有更清晰甚至可能是正确的方法来做到这一点(特别是因为我正在对文本框进行数据绑定(bind)) .

最佳答案

使用 WPF 提供的 ValidationRules。

xaml 将是:

<TextBox>
    <TextBox.Text>
        <Binding Path="Name">
            <Binding.ValidationRules>
                <ExceptionValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

文本框属性的代码是(使用正则表达式进行验证):

public string Name
{
    get { return _name; }
    set
    {
        _name = value;
        if (!Regex.IsMatch(value, @"^((?:[1-9]\d*)|(?:(?=[\d.]+)(?:[1-9]\d*|0)\.\d+))$"))
        {
            throw new ApplicationException("Please enter only numbers/decimals.");
        }
    }
}

来源:Validation in WPF


上面给出的正则表达式:^((?:[1-9]\d*)|(?:(?=[\d.]+)(?:[1-9]\d* |0)\.\d+))$ 可以在这个 Rubular link 进行测试

正则表达式将匹配这些:

1.2
22522
0.33
3.90000

但不是这些:(您可以调整正则表达式以允许其中的一些)

.999
23.35.1343
03423.23423

关于c# - 如何在文本框上只接受数字和单个句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208750/

相关文章:

c# - 如何使用 htmlhelper 为千位添加逗号

C#:如何在 selenium 的 Keyboard.SendKeys 中发送组合键

c# - 在 Linq to Sql 中调用 InsertOnSubmit 时出现 NullReferenceException

c# - 如何从另一个 WPF 表单在 WPF 中设置 TextBox 或 Label 文本

c# - 使用 "new() and ".StartNew()"创建新实例有什么区别?

c# - Unity (C#) 中的继承变量问题(更改继承变量)

c# - 方法更改的字符串值未显示在数据绑定(bind)文本框中

wpf - 有没有办法将命令与 WPF 工具包 DataGridHyperlinkColumn 相关联?

.net - Tridion:在事件系统中设置页面的元数据架构时出错

.net - 通过 HTML 设置 IE11 兼容模式