要事先必填验证,首先要重写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. 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性 ...

  2. win64 QT(VS2013) 配置 CGAL+libQGLViewer

    网上讲的都不是太全 我来说说把~ 首先感谢这位大神: chenwk891:http://blog.csdn.net/chenwk891/article/details/42171495#reply 还 ...

  3. linux中的strip命令简介------给文件脱衣服

    1.去掉-g,等于程序做了--strip-debug2.strip程序,等于程序做了--strip-debug和--strip-symbol 作为一名Linux开发人员, 如果没有听说过strip命令 ...

  4. IOS后台文件上传

    public ModelAndView GetImage(HttpServletRequest request,   HttpServletResponse response) throws Exce ...

  5. Ubuntu 安装配置 JDK+Tomcat+Nginx

    安装配置JDK 下载安装 # 下载: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=acc ...

  6. unity3d之NGUI学习流水账

    博主是跟着视频教程学的,所以最新版的u3d是否已经自带这个功能博主没有考究过. 但是视频是2015下半年的教程,当时的u3d还是需要自行导入NGUI包的. 1.首先需要下载NGUI包.点此进入ngui ...

  7. Vmware虚拟机三种网络模式详解(转)

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

  8. 为select的option绑定键盘事件

    1. 目的 可以使用快捷键1.2.3.4等自动选中select框对应的option 2. 代码 <select id="selectItem" class="for ...

  9. sdut Mountain Subsequences 2013年山东省第四届ACM大学生程序设计竞赛

    Mountain Subsequences 题目描述 Coco is a beautiful ACMer girl living in a very beautiful mountain. There ...

  10. Oracle连接远程数据库的四种设置方法

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍 第一种方法: 若oracle服务器装在本机上,那就不多说了,连 ...