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