所以我有一个TextBox,我想把输入限制在0到50之间,这有可能吗?我看过一些使用PreviewTextInput
的Regex示例,但每次只验证一个数字。
我也尝试过使用MaxLength
属性,但这似乎没有多大作用。
发布于 2022-10-25 11:13:28
使用WPFToolkit,您可以使用IntegerUpDown (这是一种简单的方法)
如果不应该是这样的(使用预览文本输入)
<TextBox Name="NumberTextBoxLimited" PreviewTextInput="NumberValidationTextBox"/>
以及使用正则表达式
using System.Text.RegularExpressions;
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
e.Handled = new Regex(@"^(0?\d|[1-4]\d|50)$").IsMatch(e.Text);
}
发布于 2022-10-26 22:04:09
考虑将此视为验证问题。
例如,您可以创建一个从ValidationRule
继承的包含自定义验证逻辑的规则。
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。
<TextBox.Text>
<Binding ...>
<Binding.ValidationRules>
<local:NumberValidationRule ValidationStep="RawProposedValue" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
另一种方法是在模型上实现IDataErrorInfo
,并将验证逻辑放在那里。您还必须更改UpdateSourceTrigger
以包括ValidatesOnDataError=True
。
https://stackoverflow.com/questions/74192994
复制相似问题