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).
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.
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.
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.