tags:

views:

78

answers:

3

I've to make a textbox(WPF) for entering time with validation. I want to enter a regular expression validation for time (6:12 am).

A: 

check this: http://msdn.microsoft.com/en-us/library/system.windows.controls.validation.errors.aspx for handling validation errors in controls

Else you can implement IDataErrorInfo in your viewmodel so that the Validation is embedded to your data itself.

Veer
A: 

How about this one :

class TimeTextBox : TextBox
{
    public Boolean IsProperTime { get; set; }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        DateTime time;

        if (String.IsNullOrEmpty(Text) || !DateTime.TryParse(Text, out time))
        {
            IsProperTime = false;
        }
        else
        {
            IsProperTime = true;
        }

        UpdateVisual();

        base.OnTextChanged(e);
    }

    private void UpdateVisual()
    {
        if (!IsProperTime)
        {
            BorderBrush = Brushes.Red;
            BorderThickness = new Thickness(1);
        }
        else
        {
            ClearValue(BorderBrushProperty);
            ClearValue(BorderThicknessProperty);
        }
    }
}

You can change the time parsing logic in there.

decyclone
+1  A: 

Regex is not the right choice here. You ultimate do need to convert a string to a date or time. Use DateTime.TryParse() so you are always sure that if the validation allows it then the conversion will work as well.

Hans Passant