天天看點

WPF 驗證控件

WPF 驗證控件

<code>&lt;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>&gt;</code>

<code>    </code><code>&lt;Window.Resources&gt;</code>

<code>        </code><code>&lt;Style TargetType=</code><code>"{x:Type TextBox}"</code><code>&gt;</code>

<code>            </code><code>&lt;Setter Property=</code><code>"Validation.ErrorTemplate"</code><code>&gt;</code>

<code>                </code><code>&lt;Setter.Value&gt;</code>

<code>                    </code><code>&lt;ControlTemplate&gt;</code>

<code>                        </code><code>&lt;DockPanel LastChildFill=</code><code>"True"</code><code>&gt;</code>

<code>                            </code><code>&lt;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}"&gt;</code>

<code>                            </code><code>&lt;/TextBlock&gt;</code>

<code>                            </code><code>&lt;Border BorderBrush=</code><code>"Green"</code> <code>BorderThickness=</code><code>"3"</code><code>&gt;</code>

<code>                                </code><code>&lt;AdornedElementPlaceholder Name=</code><code>"MyAdorner"</code> <code>/&gt;</code>

<code>                            </code><code>&lt;/Border&gt;</code>

<code>                        </code><code>&lt;/DockPanel&gt;</code>

<code>                    </code><code>&lt;/ControlTemplate&gt;</code>

<code>                </code><code>&lt;/Setter.Value&gt;</code>

<code>            </code><code>&lt;/Setter&gt;</code>

<code>            </code><code>&lt;Style.Triggers&gt;</code>

<code>                </code><code>&lt;Trigger Property=</code><code>"Validation.HasError"</code> <code>Value=</code><code>"true"</code><code>&gt;</code>

<code>                    </code><code>&lt;Setter Property=</code><code>"ToolTip"</code>

<code>                       </code><code>Value="{Binding RelativeSource={RelativeSource Self},</code>

<code>                       </code><code>Path=(Validation.Errors)[0].ErrorContent}"/&gt;</code>

<code>                </code><code>&lt;/Trigger&gt;</code>

<code>            </code><code>&lt;/Style.Triggers&gt;</code>

<code>        </code><code>&lt;/Style&gt;</code>

<code>    </code><code>&lt;/Window.Resources&gt;</code>

<code>    </code><code>&lt;Grid&gt;</code>

<code>        </code><code>&lt;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>&gt;</code>

<code>            </code><code>&lt;TextBox.Text&gt;</code>

<code>                </code><code>&lt;Binding Path=</code><code>"Name"</code> <code>UpdateSourceTrigger=</code><code>"PropertyChanged"</code><code>&gt;</code>

<code>                    </code><code>&lt;Binding.ValidationRules&gt;</code>

<code>                        </code><code>&lt;ExceptionValidationRule /&gt;</code>

<code>                    </code><code>&lt;/Binding.ValidationRules&gt;</code>

<code>                </code><code>&lt;/Binding&gt;</code>

<code>            </code><code>&lt;/TextBox.Text&gt;</code>

<code>        </code><code>&lt;/TextBox&gt;</code>

<code>        </code><code>&lt;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>&gt;</code>

<code>                </code><code>&lt;Binding Path=</code><code>"Address"</code> <code>UpdateSourceTrigger=</code><code>"PropertyChanged"</code><code>&gt;</code>

<code>                        </code><code>&lt;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>/&gt;</code>

<code>        </code><code>&lt;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>/&gt;</code>

<code>    </code><code>&lt;/Grid&gt;</code>

<code>&lt;/Window&gt;</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>/// &lt;summary&gt;</code>

<code>    </code><code>/// Interaction logic for ValidationTest.xaml</code>

<code>    </code><code>/// &lt;/summary&gt;</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 &lt;</code><code>this</code><code>.m_intMinimumLength || inputString.Length &gt;</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,如需轉載請自行聯系原作者

繼續閱讀