要事先必填验证,首先要重写ValidationRule类的Validate方法,然后在Binding中指定对应的ValidationRule。
第一步:重写ValidationRule的Validate
- public class RequiredValidationRule:ValidationRule {
- public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) {
- if (value == null || string.IsNullOrWhiteSpace(value.ToString())) {
- return new ValidationResult(false, "内容不能为空");
- }
- return new ValidationResult(true, null);
- }
- }
第二步:窗体:
- <TextBox Grid.Row="0" Grid.Column="1"
- Validation.ErrorTemplate="{StaticResource CT_TextBox_Required}"
- Style="{StaticResource Style_TextBox_Error}"
- <TextBox.Text>
- <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
- <Binding.ValidationRules>
- <vr:RequiredValidationRule />
- </Binding.ValidationRules>
- </Binding>
- </TextBox.Text>
- </TextBox>
第三步:错误控件的样式
- <ControlTemplate x:Key="CT_TextBox_Required">
- <DockPanel>
- <TextBlock Foreground="Red" FontSize="20" Text="!" />
- <AdornedElementPlaceholder />
- </DockPanel>
- </ControlTemplate>
- <Style x:Key="Style_TextBox_Error" TargetType="{x:Type TextBox}">
- <Setter Property="Margin" Value="10,5,20,5" />
- <Style.Triggers>
- <Trigger Property="Validation.HasError" Value="true">
- <Setter Property="ToolTip"
- Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" />
- </Trigger>
- </Style.Triggers>
- </Style>
我们来看看效果图:,貌似不错,但是还有不尽人意之处。在控件Focus时,控件内容为空,我希望此时就显示错误提示,而不是更改后再显示错误提示,首先要添加PreviewGotKeyboardFocus事件
- private void TextBox_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
- TextBox tb = sender as TextBox;
- tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();
- }
好,我们轻松地实现了必填验证
http://blog.csdn.net/The_Eyes/article/details/61415096
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2017-02-28 jQuery实现限制文本框的输入长度
2017-02-28 js与jquery实时监听输入框值的oninput与onpropertychange方法
2017-02-28 jQuery实现的浮动层div浏览器居中显示效果
2017-02-28 jquery代码规范让代码越来越好看
2017-02-28 asp.net截屏功能实现截取web页面
2017-02-28 拦截asp.net输出流并进行处理的方法
2017-02-28 asp.net调用系统设置字体文本框的方法