UWP TextBox仅允许输入数字和一个小数点的异常问题排查
问题分析与修复
原代码的问题出在第二个判断逻辑:当文本框已有小数点时,输入数字会触发第二个条件,错误地取消输入。因为此时args.NewText包含原有的小数点,sender.Text.IndexOf('.') > -1也为真,导致args.Cancel = true。
正确的逻辑应该是:
- 只允许数字和单个小数点
- 新文本中的小数点数量不能超过1
- 禁止非数字、非小数点的字符
修复后的代码:
private void TextBox_BeforeTextChanging(TextBox sender, TextBoxBeforeTextChangingEventArgs args) { // 禁止非数字、非小数点的字符 args.Cancel = args.NewText.Any(c => !char.IsDigit(c) && c != '.'); // 检查新文本中小数点的数量是否超过1 if (args.NewText.Count(c => c == '.') > 1) { args.Cancel = true; } }
代码说明
- 第一行判断:遍历新文本的每个字符,只要存在既不是数字也不是小数点的字符,就取消输入
- 第二部分统计新文本中的小数点数量,超过1个则取消输入,这样既限制了只能有一个小数点,也不会在已有小数点时阻止输入数字
内容的提问来源于stack exchange,提问作者Wagner
相关产品推荐
相关产品推荐

