WPF C 中 ValidationRules 的实现概述
阅读:17
点赞:0
一、引言
在WPF应用程序中,ValidationRule
类提供了验证用户输入的强大功能,尤其是针对 TextBox
这样的控件。通过创建自定义的验证规则,可以定义特定的输入条件,例如仅允许数字输入或确保输入值落在指定范围内。
二、执行ValidationRules的步骤
步骤1:定义自定义ValidationRule
为了创建一个自定义的 ValidationRule
,首先需要定义一个继承自 ValidationRule
的类,并重写 Validate
方法以包含特定的验证逻辑。
using System.Globalization;
using System.Windows.Controls;
namespace WpfValidationExample
{
public class DoubleValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
// 尝试将输入值解析为double类型。
if (double.TryParse(value as string, out double result))
{
return ValidationResult.ValidResult;
}
// 如果值不是一个有效的double,则返回错误。
return new ValidationResult(false, "数字格式无效,请输入有效的十进制数。");
}
}
}
每行注释:
-
第1行:引入必要的命名空间。 -
第3行:定义一个名为 DoubleValidationRule
的类,继承自ValidationRule
。 -
第5行:重写 Validate
方法。 -
第7行至第11行:尝试将输入的字符串转换为 double
类型。 -
第13行至第18行:如果转换失败,则返回一个包含错误消息的 ValidationResult
对象。
步骤2:在XAML中使用ValidationRule
接下来,在XAML中利用定义好的 ValidationRule
。
<Window x:Class="WpfValidationExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfValidationExample"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<local:DoubleValidationRule x:Key="DoubleValidationRule" />
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel>
<AdornedElementPlaceholder />
<TextBlock Foreground="Red" FontSize="12" Text="{Binding [0].ErrorContent}" />
</StackPanel>
</ControlTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="Double Value" Grid.Row="0" Grid.Column="0" FontSize="20" Margin="0,10,0,0" />
<TextBox HorizontalAlignment="Center" Width="200" Height="40" Grid.Row="1" Grid.Column="1" Margin="20,10,0,0">
<TextBox.Text>
<Binding Path="DoubleValue" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" NotifyOnValidationError="True" StringFormat="F2">
<Binding.ValidationRules>
<local:DoubleValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</Window>
每行注释:
-
第1行至第8行:定义了窗口的基本属性。 -
第10行至第17行:定义了一个自定义的 DoubleValidationRule
和一个用于显示错误信息的模板。 -
第19行至第34行:定义了布局结构,并设置了一个包含双精度数值输入的 TextBox
。
步骤3:展示验证错误
通过应用样式或模板来在用户界面中直观地显示验证错误,例如红色边框或显示错误信息的提示框。
<Window.Resources>
<local:DoubleValidationRule x:Key="DoubleValidationRule" />
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel>
<AdornedElementPlaceholder />
<TextBlock Foreground="Red" FontSize="12" Text="{Binding [0].ErrorContent}" />
</StackPanel>
</ControlTemplate>
</Window.Resources>
每行注释:
-
第1行至第6行:定义了资源部分,包括 DoubleValidationRule
和ErrorTemplate
。
步骤4:实施结果
按照上述步骤实施后,可以达到以下效果:
-
创建了一个自定义的 ValidationRule
,用于验证输入是否为合法的双精度浮点数。 -
在XAML中应用了这个验证规则,并且当验证失败时,会显示相应的错误信息。 -
通过样式和模板增强了用户体验,使错误更加明显。
三、结论
-
使用WPF中的 ValidationRule
可以轻松地创建自定义的输入验证逻辑。 -
自定义的 ValidationRule
可以集成到绑定表达式中,以便实时验证输入数据。 -
通过在XAML中应用适当的样式和模板,可以有效地突出显示验证错误,提高用户界面的友好性。
通过以上步骤,我们不仅实现了对输入数据的有效验证,还增强了用户界面的交互性和可用性。