Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / System / Windows / Controls / validation.cs / 1 / validation.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2005 by Microsoft Corporation. All rights reserved. // // // // Description: // Validation-related methods and DependencyProperties // // See specs at [....]/connecteddata/Specs/Validation.mht // // History: // 02/03/2005 [....]: created. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Media; using MS.Internal.Controls; using MS.Internal.Data; using MS.Internal.KnownBoxes; using MS.Utility; namespace System.Windows.Controls { ////// Validation-related methods and DependencyProperties /// public static class Validation { ////// ValidationError event /// public static readonly RoutedEvent ErrorEvent = EventManager.RegisterRoutedEvent("ValidationError", RoutingStrategy.Bubble, typeof(EventHandler), typeof(Validation)); /// /// Adds a handler for the ValidationError attached event /// /// UIElement or ContentElement that listens to this event /// Event Handler to be added public static void AddErrorHandler(DependencyObject element, EventHandlerhandler) { FrameworkElement.AddHandler(element, ErrorEvent, handler); } /// /// Removes a handler for the ValidationError attached event /// /// UIElement or ContentElement that listens to this event /// Event Handler to be removed public static void RemoveErrorHandler(DependencyObject element, EventHandlerhandler) { FrameworkElement.RemoveHandler(element, ErrorEvent, handler); } /// /// The key needed to set the publicly read-only ValidationErrors property. /// internal static readonly DependencyPropertyKey ErrorsPropertyKey = DependencyProperty.RegisterAttachedReadOnly("Errors", typeof(ReadOnlyObservableCollection), typeof(Validation), new FrameworkPropertyMetadata( ValidationErrorCollection.Empty, FrameworkPropertyMetadataOptions.NotDataBindable)); /// /// ValidationErrors DependencyProperty. /// holds the list of all active validation errors of any data binding targeting the hosting element. /// ////// The application cannot modify the content of this collection. /// public static readonly DependencyProperty ErrorsProperty = ErrorsPropertyKey.DependencyProperty; ///Static accessor for Validation.Errors property ////// The application cannot modify the content of this collection. /// ///DependencyObject element cannot be null public static ReadOnlyObservableCollectionGetErrors(DependencyObject element) { if (element == null) throw new ArgumentNullException("element"); return (ReadOnlyObservableCollection ) element.GetValue(ErrorsProperty); } /// /// holds the internally modifiable collection of validation errors. /// internal static readonly DependencyProperty ValidationErrorsInternalProperty = DependencyProperty.RegisterAttached("ErrorsInternal", typeof(ValidationErrorCollection), typeof(Validation), new FrameworkPropertyMetadata( (ValidationErrorCollection)null, new PropertyChangedCallback(OnErrorsInternalChanged))); // Update HasErrors and Invalidate the public ValidationErrors property whose GetOverride will return // the updated value of ValidationErrorsInternal, nicely wrapped into a ReadOnlyCollectionprivate static void OnErrorsInternalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ValidationErrorCollection newErrors = e.NewValue as ValidationErrorCollection; if ((newErrors == null) || (newErrors.Count == 0)) { d.ClearValue(HasErrorPropertyKey); d.ClearValue(ErrorsPropertyKey); } else { d.SetValue(HasErrorPropertyKey, BooleanBoxes.TrueBox); d.SetValue(ErrorsPropertyKey, new ReadOnlyObservableCollection (newErrors)); } } internal static ValidationErrorCollection GetErrorsInternal(DependencyObject target) { return (ValidationErrorCollection) target.GetValue(Validation.ValidationErrorsInternalProperty); } /// /// The key needed set a read-only property. /// internal static readonly DependencyPropertyKey HasErrorPropertyKey = DependencyProperty.RegisterAttachedReadOnly("HasError", typeof(bool), typeof(Validation), new FrameworkPropertyMetadata( BooleanBoxes.FalseBox, FrameworkPropertyMetadataOptions.NotDataBindable)); ////// HasError DependencyProperty is true if any binding on the target element /// has a validation error. /// public static readonly DependencyProperty HasErrorProperty= HasErrorPropertyKey.DependencyProperty; ///Static accessor for HasError property ///DependencyObject element cannot be null public static bool GetHasError(DependencyObject element) { if (element == null) throw new ArgumentNullException("element"); return (bool) element.GetValue(HasErrorProperty); } ////// Template used to generate validation error feedback on the AdornerLayer. Default /// Template is: /// public static readonly DependencyProperty ErrorTemplateProperty = DependencyProperty.RegisterAttached("ErrorTemplate", typeof(ControlTemplate), typeof(Validation), new FrameworkPropertyMetadata( CreateDefaultErrorTemplate(), FrameworkPropertyMetadataOptions.NotDataBindable)); //////
////// ////// Static accessor for ErrorTemplate property ///DependencyObject element cannot be null [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static ControlTemplate GetErrorTemplate(DependencyObject element) { if (element == null) throw new ArgumentNullException("element"); return element.GetValue(ErrorTemplateProperty) as ControlTemplate; } ///Static modifier for ErrorTemplate property ///DependencyObject element cannot be null public static void SetErrorTemplate(DependencyObject element, ControlTemplate value) { if (element == null) throw new ArgumentNullException("element"); // (perf) don't set if the existing value is already correct object oldValue = element.ReadLocalValue(ErrorTemplateProperty); if (!Object.Equals(oldValue, value)) element.SetValue(ErrorTemplateProperty, value); } internal static void ShowValidationAdorner(DependencyObject targetElement, bool show) { UIElement targetUIElement = targetElement as UIElement; if (targetUIElement != null) { AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(targetUIElement); if (adornerLayer == null) return; TemplatedAdorner validationAdorner = targetUIElement.ReadLocalValue(ValidationAdornerProperty) as TemplatedAdorner; if (show && validationAdorner == null) { ControlTemplate validationTemplate = GetErrorTemplate(targetUIElement); if (validationTemplate != null) { validationAdorner = new TemplatedAdorner(targetUIElement, validationTemplate); adornerLayer.Add(validationAdorner); targetUIElement.SetValue(ValidationAdornerProperty, validationAdorner); } } else if (!show && validationAdorner != null) { validationAdorner.ClearChild(); adornerLayer.Remove(validationAdorner); targetUIElement.ClearValue(ValidationAdornerProperty); } } } ////// Mark this BindingExpression as invalid. If the BindingExpression has been /// explicitly marked invalid in this way, then it will remain /// invalid until ClearInvalid is called or another transfer to the source validates successfully. /// public static void MarkInvalid(BindingExpressionBase bindingExpression, ValidationError validationError) { if (bindingExpression == null) throw new ArgumentNullException("bindingExpression"); if (validationError == null) throw new ArgumentNullException("validationError"); bindingExpression.UpdateValidationError(validationError); } ////// Clears the ValidationError that was set through a call /// to MarkInvalid or a previously failed validation of that BindingExpression. /// public static void ClearInvalid(BindingExpressionBase bindingExpression) { if (bindingExpression == null) throw new ArgumentNullException("bindingExpression"); bindingExpression.UpdateValidationError(null); } private static ControlTemplate CreateDefaultErrorTemplate() { ControlTemplate defaultTemplate = new ControlTemplate(typeof(Control)); //// FrameworkElementFactory border = new FrameworkElementFactory(typeof(Border), "Border"); border.SetValue(Border.BorderBrushProperty, Brushes.Red); border.SetValue(Border.BorderThicknessProperty, new Thickness(1)); FrameworkElementFactory adornedElementPlaceHolder = new FrameworkElementFactory(typeof(AdornedElementPlaceholder), "Placeholder"); border.AppendChild(adornedElementPlaceHolder); defaultTemplate.VisualTree = border; defaultTemplate.Seal(); return defaultTemplate; } ///// /// Reference to the ValidationAdorner /// private static readonly DependencyProperty ValidationAdornerProperty = DependencyProperty.RegisterAttached("ValidationAdorner", typeof(TemplatedAdorner), typeof(Validation), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.NotDataBindable)); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BasicDesignerLoader.cs
- HostSecurityManager.cs
- CacheEntry.cs
- XmlQualifiedName.cs
- MultipleCopiesCollection.cs
- CellConstant.cs
- IndentedTextWriter.cs
- UIElement3DAutomationPeer.cs
- Timer.cs
- ScriptResourceInfo.cs
- XmlSchemaInfo.cs
- TableLayoutStyleCollection.cs
- EntityDataReader.cs
- ParagraphVisual.cs
- ValidationSummary.cs
- XmlStreamStore.cs
- AlphabeticalEnumConverter.cs
- ViewManager.cs
- FacetEnabledSchemaElement.cs
- SqlConnection.cs
- CompiledXpathExpr.cs
- UndoManager.cs
- MemoryPressure.cs
- TreeNodeMouseHoverEvent.cs
- CheckoutException.cs
- XamlToRtfWriter.cs
- TreeViewImageIndexConverter.cs
- WpfPayload.cs
- ParentQuery.cs
- RoutingChannelExtension.cs
- DbModificationCommandTree.cs
- RSAProtectedConfigurationProvider.cs
- QuaternionAnimation.cs
- BaseDataBoundControl.cs
- LongValidatorAttribute.cs
- CompilerResults.cs
- PerfService.cs
- ConnectionStringEditor.cs
- MatrixUtil.cs
- XmlHelper.cs
- HelpInfo.cs
- ImageClickEventArgs.cs
- CopyOnWriteList.cs
- CreateWorkflowOwnerCommand.cs
- SliderAutomationPeer.cs
- HwndAppCommandInputProvider.cs
- BitmapEffectRenderDataResource.cs
- BitSet.cs
- ZipIOExtraField.cs
- ConsoleEntryPoint.cs
- DoubleAnimationUsingPath.cs
- SchemaImporterExtensionElement.cs
- TransformerInfoCollection.cs
- EncryptedReference.cs
- SmuggledIUnknown.cs
- MissingFieldException.cs
- DataSourceHelper.cs
- CornerRadiusConverter.cs
- PasswordDeriveBytes.cs
- GridView.cs
- ListSortDescription.cs
- UrlPropertyAttribute.cs
- ExceptionValidationRule.cs
- Form.cs
- SafeFileMappingHandle.cs
- GridViewAutomationPeer.cs
- JsonEnumDataContract.cs
- XmlDocumentSerializer.cs
- TemplatingOptionsDialog.cs
- SpellerStatusTable.cs
- Regex.cs
- ProgressBarBrushConverter.cs
- DetailsViewInsertedEventArgs.cs
- GrammarBuilder.cs
- ValidationRuleCollection.cs
- DebuggerAttributes.cs
- ProfilePropertySettings.cs
- SystemWebCachingSectionGroup.cs
- DBCSCodePageEncoding.cs
- DataStorage.cs
- Constants.cs
- TreeWalker.cs
- DrawingGroup.cs
- SrgsDocument.cs
- SchemaImporter.cs
- Utility.cs
- SchemaCreator.cs
- FieldValue.cs
- ConstrainedGroup.cs
- SqlDataSourceStatusEventArgs.cs
- ServiceOperationUIEditor.cs
- Lasso.cs
- TouchPoint.cs
- ScriptManager.cs
- NotCondition.cs
- IsolatedStorageException.cs
- TemplateBindingExtensionConverter.cs
- ProcessHostFactoryHelper.cs
- ItemCheckEvent.cs
- MarkerProperties.cs