更新时间:2022-09-20 16:07:34
WPF 验证控件
<Window x:Class= "WpfApplication2.ValidationTest"
xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local= "clr-namespace:WpfApplication2"
Title= "ValidationTest" Height= "300" Width= "800" >
<Window.Resources>
<Style TargetType= "{x:Type TextBox}" >
<Setter Property= "Validation.ErrorTemplate" >
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill= "True" >
<TextBlock DockPanel.Dock= "Right"
Foreground= "Red"
Margin= "5"
FontSize= "12pt"
Text="{Binding ElementName=MyAdorner,
Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
</TextBlock>
<Border BorderBrush= "Green" BorderThickness= "3" >
<AdornedElementPlaceholder Name= "MyAdorner" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property= "Validation.HasError" Value= "true" >
<Setter Property= "ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Width= "200" Height= "50" Margin= "5" VerticalAlignment= "Top" >
<TextBox.Text>
<Binding Path= "Name" UpdateSourceTrigger= "PropertyChanged" >
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox Width= "200" Margin= "5" Height= "50" VerticalAlignment= "Center" >
<TextBox.Text>
<Binding Path= "Address" UpdateSourceTrigger= "PropertyChanged" >
<Binding.ValidationRules>
<local:StringRangeValidationRule MinimumLength= "1" MaximumLength= "30"
ErrorMessage= "Address is required and must be less than 30 letters." />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox Text= "HI" Height= "50" Width= "200" VerticalAlignment= "Bottom" />
</Grid>
</Window> |
后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace WpfApplication2
{ /// <summary>
/// Interaction logic for ValidationTest.xaml
/// </summary>
public partial class ValidationTest : Window
{
public ValidationTest()
{
InitializeComponent();
SimpleCustomer c = new SimpleCustomer();
c.Name = "Fred" ;
c.Address = "1/3 Powell Street" ;
this .DataContext = c;
}
}
/// <summary>
/// 异常验证
/// </summary>
public class SimpleCustomer
{
public SimpleCustomer()
{ }
private string m_strName;
public string Name
{
set
{
this .m_strName = value;
if (String.IsNullOrEmpty( this .m_strName))
{
throw new ApplicationException( "Customer name is mandatory." );
}
}
get
{
return this .m_strName;
}
}
private string m_strAddress;
public string Address
{
set
{
this .m_strAddress = value;
}
get
{
return this .m_strAddress;
}
}
}
/// <summary>
/// 自定义验证
/// </summary>
public class StringRangeValidationRule : ValidationRule
{
public StringRangeValidationRule()
{ }
private int m_intMinimumLength = -1;
public int MinimumLength
{
set
{
this .m_intMinimumLength = value;
}
get
{
return this .m_intMinimumLength;
}
}
private int m_intMaximumLength = -1;
public int MaximumLength
{
set
{
this .m_intMaximumLength = value;
}
get
{
return this .m_intMaximumLength;
}
}
private string m_strErrorMessage = string .Empty;
public string ErrorMessage
{
set
{
this .m_strErrorMessage = value;
}
get
{
return this .m_strErrorMessage;
}
}
public override ValidationResult Validate( object value, System.Globalization.CultureInfo cultureInfo)
{
ValidationResult result = new ValidationResult( true , null );
string inputString =(value ?? string .Empty).ToString();
if ( inputString == null )
{
inputString = string .Empty;
}
if (inputString.Length < this .m_intMinimumLength || inputString.Length > this .m_intMaximumLength)
{
return new ValidationResult( false , this .ErrorMessage);
}
return result;
}
}
} |
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/12/26/2172466.html,如需转载请自行联系原作者