WPF C 中 ValidationRules 的实现概述

发布:2024-10-29 09:49 阅读: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 stringout 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行:定义了资源部分,包括 DoubleValidationRuleErrorTemplate

步骤4:实施结果

按照上述步骤实施后,可以达到以下效果:

  • 创建了一个自定义的 ValidationRule,用于验证输入是否为合法的双精度浮点数。
  • 在XAML中应用了这个验证规则,并且当验证失败时,会显示相应的错误信息。
  • 通过样式和模板增强了用户体验,使错误更加明显。

三、结论

  1. 使用WPF中的 ValidationRule 可以轻松地创建自定义的输入验证逻辑。
  2. 自定义的 ValidationRule 可以集成到绑定表达式中,以便实时验证输入数据。
  3. 通过在XAML中应用适当的样式和模板,可以有效地突出显示验证错误,提高用户界面的友好性。

通过以上步骤,我们不仅实现了对输入数据的有效验证,还增强了用户界面的交互性和可用性。