如果用户在TextBox中输入的值太大,我该如何触发事件?

时间:2012-04-13 14:07:47

标签: c# wpf xaml

目前我有一个绑定到byte属性的文本框。如果用户在0到255之间输入,则应用程序将按预期运行,并且属性的setter将执行。

但是,如果用户输入256或更大,则属性的setter不会执行。所有发生的事情是TextBox变成红色轮廓。我认为这表明它是无效的值。

但这还不够好。我需要向用户显示消息框或一些注释,以通知他们这是一个无效的值。我需要做些什么才能实现这一目标?

4 个答案:

答案 0 :(得分:2)

您需要在页面上添加验证摘要控件。

默认情况下会隐藏它,但是当发生验证错误时(如果输入大于255的值),它将显示告诉用户出了什么问题。

several such controls available for WPF,您需要对它们进行评估并选择适合您的方法。您可能需要在数据层上设置一些属性来控制显示的确切错误消息。

答案 1 :(得分:1)

另一种可能性是定义文本框的TextChanged事件,以便每次文本更改时它都会执行Int32.Parse。如果值超过255,则可以触发消息框。

如果你想表达意思,你可以将最大长度设为两个字符,并强制用户以十六进制输入数字。

答案 2 :(得分:0)

我有一篇文章涵盖了你的要求。标题可能看起来与您要求的内容不符,但它恰好演示了您要求的功能。

How to disable a Button on TextBox ValidationErrors in WPF

这将向您展示如何不仅在TextBox周围有红色,还有消息如何。

答案 3 :(得分:0)

您可以向控件或窗口添加验证错误处理程序。

在窗口构造函数中:

this.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(OnValidationError));

处理程序:

    private void OnValidationError(Object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource is DependencyObject)
        {
            DependencyObject instance = e.OriginalSource as DependencyObject;
            if (Validation.GetHasError(instance))
            {
                System.Collections.ObjectModel.ReadOnlyObservableCollection<ValidationError> errors = Validation.GetErrors(instance);
                // todo build message from errors and display
            }
        }
    }