Trên WPF thực hiện validation thật đơn giản, các bạn hãy thực hiện theo các bước như sau để kiểm tra nội dung nhập vào Textbox có phải là số hay chữ nhé, nếu không phải là số thì sẽ hiển thị thông báo bằng việc tô khung Textbox thành màu đỏ.
Nội dung
Bước 1. Thêm mã sau vào tệp C#
public void ValidateTextboxTelephone(TextBox ctrltxt) { string errormessage = "Định dạng số điện thoại không đúng (vd: 0345346000)"; BindingExpression expression = ctrltxt.GetBindingExpression(TextBox.TextProperty); expression.UpdateSource(); Regex regex = new Regex("[^0-9]+"); if (regex.IsMatch(ctrltxt.Text) == true) // check validation condition or reg expression here { ValidationError error = new ValidationError(new ExceptionValidationRule(), expression, errormessage, null); Validation.MarkInvalid(expression, error); } else { Validation.ClearInvalid(expression); } }
private void txtManhanvien_LostFocus(object sender, RoutedEventArgs e) { ValidateTextboxTelephone(txtManhanvien); }
Bước 2. Thêm mã sau vào tệp App.xaml
<ControlTemplate x:Key="InputErrorTemplate"> <DockPanel> <Border Name="validationBorder" BorderBrush="Red" BorderThickness="2"> <Border.Resources> <Storyboard x:Key="_blink"> <ColorAnimationUsingKeyFrames AutoReverse="True" BeginTime="00:00:00" Storyboard.TargetName="validationBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" RepeatBehavior="00:00:02"> <SplineColorKeyFrame KeyTime="00:00:00.5" Value="#00FF0000"/> </ColorAnimationUsingKeyFrames> </Storyboard> </Border.Resources> <Border.Triggers> <EventTrigger RoutedEvent="FrameworkElement.Loaded"> <BeginStoryboard Storyboard="{StaticResource _blink}" /> </EventTrigger> </Border.Triggers> <AdornedElementPlaceholder/> </Border> </DockPanel> </ControlTemplate>
Đối với đoạn mã trên là đối với Usercontrol, nếu là cửa sổ Window thì thay chữ UserControl thành Window.
Bước 3. Đối với Textbox ta thay thế bằng đoạn mã sau
<TextBox Name="txtManhanvien" Width="200" LostFocus="txtManhanvien_LostFocus" Text="{Binding Path=DisplayData, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=LostFocus, ValidatesOnExceptions=True}" Validation.ErrorTemplate="{StaticResource InputErrorTemplate}" > </TextBox>