WPF验证之——必填验证

要事先必填验证,首先要重写ValidationRule类的Validate方法,然后在Binding中指定对应的ValidationRule。

第一步:重写ValidationRule的Validate

[csharp]  view plain  copy
 
  1. public class RequiredValidationRule:ValidationRule {  
  2.   
  3.     public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) {  
  4.         if (value == null || string.IsNullOrWhiteSpace(value.ToString())) {  
  5.             return new ValidationResult(false, "内容不能为空");  
  6.         }  
  7.         return new ValidationResult(true, null);  
  8.     }  
  9. }  


第二步:窗体:

[html]  view plain  copy
 
  1. <TextBox Grid.Row="0" Grid.Column="1"   
  2.             Validation.ErrorTemplate="{StaticResource CT_TextBox_Required}"  
  3.             Style="{StaticResource Style_TextBox_Error}"  
  4.     <TextBox.Text>  
  5.         <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">  
  6.             <Binding.ValidationRules>  
  7.                 <vr:RequiredValidationRule />  
  8.             </Binding.ValidationRules>  
  9.         </Binding>  
  10.     </TextBox.Text>  
  11. </TextBox>  


第三步:错误控件的样式

[html]  view plain  copy
 
  1. <ControlTemplate x:Key="CT_TextBox_Required">  
  2.     <DockPanel>  
  3.         <TextBlock Foreground="Red" FontSize="20" Text="!" />  
  4.         <AdornedElementPlaceholder />  
  5.     </DockPanel>  
  6. </ControlTemplate>  
  7. <Style x:Key="Style_TextBox_Error" TargetType="{x:Type TextBox}">  
  8.     <Setter Property="Margin" Value="10,5,20,5" />  
  9.     <Style.Triggers>  
  10.         <Trigger Property="Validation.HasError" Value="true">  
  11.             <Setter Property="ToolTip"  
  12.                     Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" />  
  13.         </Trigger>  
  14.     </Style.Triggers>  
  15. </Style>  


我们来看看效果图:,貌似不错,但是还有不尽人意之处。在控件Focus时,控件内容为空,我希望此时就显示错误提示,而不是更改后再显示错误提示,首先要添加PreviewGotKeyboardFocus事件

[csharp]  view plain  copy
 
  1. private void TextBox_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {  
  2.     TextBox tb = sender as TextBox;  
  3.     tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();  
  4. }  


好,我们轻松地实现了必填验证

 

http://blog.csdn.net/The_Eyes/article/details/61415096

转载于:https://www.cnblogs.com/sjqq/p/8486025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的界面开发技术,其基于.NET Framework平台,并使用C#编程语言进行开发。WPF提供了一套强大的工具和框架,使开发人员能够轻松创建富有吸引力、功能丰富的用户界面。 WPF与传统的Windows Forms相比具有许多优势。首先,WPF支持更加灵活和现代化的用户界面设计,可以轻松地创建透明、动画和多媒体效果等视觉效果。其次,WPF具有更好的分离性,允许开发人员将界面逻辑与业务逻辑进行分离,使代码更加清晰和易于维护。此外,WPF还支持数据绑定和样式模板等功能,使界面开发更加高效和可重用。 在使用WPF进行编程时,首先需要了解XAML(Extensible Application Markup Language)语言,它用于定义WPF界面元素和布局。然后,使用C#语言编写代码逻辑,处理用户交互、数据绑定、事件处理等方面的功能。在WPF中,可以通过使用命令模式和MVVM(Model-View-ViewModel)架构来组织和管理代码,以实现更好的代码分离性。 另外,WPF提供了丰富的控件库,开发人员可以使用这些控件来构建各种功能和复杂的界面。同时,WPF还支持自定义控件的开发,开发人员可以根据具体需求创建自己的控件。 总之,WPF是一种强大的界面开发技术,可以帮助开发人员创建出具有丰富功能和吸引力的Windows应用程序。同时,使用C#语言进行开发可以使开发过程更加高效和灵活。无论是初学者还是有经验的开发人员,都可以从WPF编程宝典中学习到丰富的知识和技巧,提高自己的WPF编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值