我有一个没有绑定的文本框。
<TextBox x:Name="inputBox" Grid.Column="1" Grid.Row="1" />
文本框只接受数字(双打)并立即显示警告其他内容(字母或符号)写入框中。
在TextChanged事件中,我根据输入的值进行一些计算并将其显示在TextBlock中,因此我需要一些方法来验证输入是用户在框中写入的数字,但我有一个很难找到一个好方法来做到这一点。
有什么想法吗?
答案 0 :(得分:4)
我之前使用的是禁止使用非数字字符的正则表达式。也许这是可以改编的东西?
我的代码用于服务器上的端口,所以只有数字,但应该直接添加。对于双打(我认为“[^ 0-9 \。]”应该有用,但正则表达式不是我非常擅长的东西:-))
// Text change in Port text box
private void txtPort_TextChanged(object sender, TextChangedEventArgs e)
{
// Only allow numeric input into the Port setting.
Regex rxAllowed = new Regex(@"[^0-9]", RegexOptions.IgnoreCase);
txtPort.Text = rxAllowed.Replace(txtPort.Text, "");
txtPort.SelectionStart = txtPort.Text.Length;
}
答案 1 :(得分:2)
这是何时使用行为的另一个示例。
public class TextBoxValidator : Behavior<TextBox>
{
protected override void OnAttached()
{
AssociatedObject.TextChanged += new TextChanged(OnTextChanged);
}
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
// Here you could add the code shown above by Firedragon or you could
// just use int.TryParse to see if the number if valid.
// You could also expose a Regex property on the behavior to allow lots of
// types of validation
}
}
您没有真正解释当用户输入无效值时您想要采取的操作。
答案 2 :(得分:1)
也许最好将Binding
与ValueConverter
一起使用来更新TextBlock的内容。在这种情况下,您可以在转换器中实现数值的验证。