wpf textbox 只能输入数字,案例
时间: 2024-12-06 13:04:54 浏览: 18
在WPF中,为了限制`TextBox`只允许输入数字,你可以使用`PasswordBox`代替,因为密码框默认会隐藏输入的内容并仅接受数字。如果你需要保留`TextBox`的形式,并且希望实时过滤非数字输入,可以利用`TextChanged`事件结合正则表达式进行检查。这里有一个简单的示例:
```xaml
<TextBox x:Name="txtNumberInput" TextChanged="txtNumberInput_TextChanged">
<TextBox.InputBinding>
<Binding Path="Text" UpdateSourceTrigger="PropertyChanged"
ValidatesOnDataErrors="True"
ValidatesValue="true">
<Binding.ValidationRules>
<ValidationErrorHandler>
<MultiBinding Converter="{StaticResource NumberValidatorConverter}">
<Binding Path=""/>
<ObjectBinding Path="Error.Content" />
</MultiBinding>
</ValidationErrorHandler>
</Binding.ValidationRules>
</Binding>
</TextBox.InputBinding>
</TextBox>
```
然后,在后端的`txtNumberInput_TextChanged`事件处理器中添加验证逻辑:
```csharp
public partial class YourView : UserControl
{
private void txtNumberInput_TextChanged(object sender, TextChangedEventArgs e)
{
string input = txtNumberInput.Text;
if (!Regex.IsMatch(input, @"^-?\d+$")) // 使用正则表达式检查输入是否全由数字组成
{
txtNumberInput.Text = ""; // 清除非法输入
txtNumberInput.SetError(txtNumberInput.Name, "请输入数字");
}
else
{
txtNumberInput.SetError(txtNumberInput.Name, null);
}
}
public static readonly DependencyProperty ValidationConverterProperty =
DependencyProperty.RegisterAttached("ValidationConverter", typeof(IValueConverter),
typeof(YourView), new FrameworkPropertyMetadata(null));
public static IValueConverter GetValidationConverter(DependencyObject obj)
{
return (IValueConverter)obj.GetValue(ValidationConverterProperty);
}
public static void SetValidationConverter(DependencyObject obj, IValueConverter value)
{
obj.SetValue(ValidationConverterProperty, value);
}
// NumberValidatorConverter 类实现数字转换器逻辑...
}
```
在这里,`NumberValidatorConverter`应是一个自定义值转换器,用于处理验证规则。
阅读全文