输入验证Silverlight

时间:2011-09-29 11:47:39

标签: c# silverlight xaml

我有一个没有绑定的文本框。

<TextBox x:Name="inputBox" Grid.Column="1" Grid.Row="1"  />

文本框只接受数字(双打)并立即显示警告其他内容(字母或符号)写入框中。

在TextChanged事件中,我根据输入的值进行一些计算并将其显示在TextBlock中,因此我需要一些方法来验证输入是用户在框中写入的数字,但我有一个很难找到一个好方法来做到这一点。

有什么想法吗?

3 个答案:

答案 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)

也许最好将BindingValueConverter一起使用来更新TextBlock的内容。在这种情况下,您可以在转换器中实现数值的验证。