首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将WPF TextBox限制为1-50之间的数值?

如何将WPF TextBox限制为1-50之间的数值?
EN

Stack Overflow用户
提问于 2022-10-25 10:56:08
回答 2查看 37关注 0票数 0

所以我有一个TextBox,我想把输入限制在0到50之间,这有可能吗?我看过一些使用PreviewTextInput的Regex示例,但每次只验证一个数字。

我也尝试过使用MaxLength属性,但这似乎没有多大作用。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 11:13:28

使用WPFToolkit,您可以使用IntegerUpDown (这是一种简单的方法)

如果不应该是这样的(使用预览文本输入)

代码语言:javascript
运行
复制
<TextBox Name="NumberTextBoxLimited" PreviewTextInput="NumberValidationTextBox"/>

以及使用正则表达式

代码语言:javascript
运行
复制
using System.Text.RegularExpressions;
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
    e.Handled = new Regex(@"^(0?\d|[1-4]\d|50)$").IsMatch(e.Text);
}
票数 1
EN

Stack Overflow用户

发布于 2022-10-26 22:04:09

考虑将此视为验证问题。

例如,您可以创建一个从ValidationRule继承的包含自定义验证逻辑的规则。

代码语言:javascript
运行
复制
public class NumberValidationRule : ValidationRule
{
  public override ValidationResult Validate(object value, CultureInfo cultureInfo)
  {
    int number;
    if (!int.TryParse(value.ToString(), out number))
    {
      return new ValidationResult(false, "Not a number");
    }
    
    if (number < 0 || number > 50) 
    {
      return new ValidationResult(false, "Not between 0 and 50.");
    }

    return new ValidationResult(true, null);
}

然后,在绑定中添加一个规则(就像TextBox下面的代码片段)。为了简洁起见,我省略了一些无关的Xaml。

代码语言:javascript
运行
复制
<TextBox.Text>
  <Binding ...>
    <Binding.ValidationRules>
      <local:NumberValidationRule ValidationStep="RawProposedValue" />
    </Binding.ValidationRules>
  </Binding>
</TextBox.Text>

另一种方法是在模型上实现IDataErrorInfo,并将验证逻辑放在那里。您还必须更改UpdateSourceTrigger以包括ValidatesOnDataError=True

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74192994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档