博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF验证之——必填验证
阅读量:5308 次
发布时间:2019-06-14

本文共 1755 字,大约阅读时间需要 5 分钟。

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

第一步:重写ValidationRule的Validate

[csharp] 
 
 
  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] 
 
 
  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] 
 
 
  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] 
 
 
  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

你可能感兴趣的文章
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>