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

第一步:重写ValidationRule的Validate

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

第二步:窗体:

  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>

第三步:错误控件的样式

  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事件

  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

WPF验证之——必填验证的更多相关文章

  1. RequiredFieldValidator控件--必填验证控件

    RequiredFieldValidator控件: ·RequiredFieldValidator控件也被称之为必填验证控件,顾名思义,也就是与RequiredFieldValidator控件关联的控 ...

  2. js页面字段的必填验证方法

    https://blog.csdn.net/fn_2015/article/details/73498462 <script type="text/javascript" s ...

  3. 工作总结 MVC 验证 [Required] 必填 与 string 小知识

    例如 添加页面有个 title  字段  设置了 [Required] 不填的时候   设置 还是验证不通过 设置为 还是不通过  说明了  验证只与页面上传不传值有关   与在后台设不设置值 无关. ...

  4. iview表单验证--数字必填+校验

    直接使用: { required: true, type:"integer", message:"请填写整数", trigger: "blur&quo ...

  5. ASP.NET中Textbox后的必填验证控件RequiredFieldValidator的使用方法。

    制作效果如下: 实现方法: 1. 拖动RequiredFieldValidator控件到相应的textbox后位置,点击属性面板,输入ErroMessage相应信息,更改ForeColor为红色 设置 ...

  6. kendo upload必填验证

    @using Kendo.Mvc.UI @using StudentManage.Common.Helper @model StudentManage.Models.Home.ImportDataFr ...

  7. Layui 必填验证

    lay-verify="required"

  8. Element 中表单非必填数据项 必须为数字的验证问题

    Element-ui 的el-form组建中,自带基本的验证功能,比如某些项必填的验证,直接加入rules 规则中即可,如下实例: 在页面中书写如下: <el-form-item label=& ...

  9. PHP 表单验证 - 必填字段

    -------------------------------------------------------------------------- 本节展示如何制作必填输入字段,并创建需要时所用的错 ...

随机推荐

  1. JS判断一个字符串是否包含一个子串函数.

    微信小程序 JS判断一个字符串是否包含一个子串函数. //str 字符串,name子串     contains:function(str,name){         if(str.indexOf( ...

  2. Visual studio之C# 串口通讯SerialPort

    背景 App需要串口进行通讯,在此做个记录和简要说明. 正文 添加命名空间 using System.IO.Ports; 实例化串口 SerialPort serialPortO = new Seri ...

  3. struts2 常用标签

    版权声明:本文为博主原创文章,未经博主允许不得转载. Struts2可以将所有标签分成3类: 准备工作:需要在JSP页面引入标签库 <%@ taglib prefix="s" ...

  4. struts2 ValueStack的作用

    Value Stack的作用: 1.       可以作为一个数据中转站 2.       用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合.我用得最多的就是数据 ...

  5. java基础讲解09-----接口,继承,多态

    还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态 1.类的继承 继承的思想:基于某个父类的扩展,制定一个新的子类.子类可以继承父类原有的属性,方法,也可以重写父类的 ...

  6. oracle聚合函数及行专列,pivot rollup cube

    1.原始数据 --方法-: --以单位分组,计算每类特殊情况的合计以及按照单位的小计数 with a as (SELECT b.szfz, case  when tsqk is not null th ...

  7. PL/SQL TOAD 不安装Oracle客户端连接数据库的方法

    不安装Oracle客户端连接数据库的方法 本机环境: win7 64位中文旗舰版 一.准备工作: 1)到ORACLE官网下载instantclient,下载地址:http://www.oracle.c ...

  8. javascript中call apply的区别

    obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是把obj(即this)绑定到th ...

  9. Django项目国际化

    Django项目国际化 实验环境: py3.4.3 + django1.8.2 + Windows 项目设置 >django-admin startproject I18nDjango > ...

  10. 利用C#的指针编写都一个简单链表

    using System; namespace UnsafeTest { unsafe struct link { public int x; public link* next; } class P ...