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
- Listbox.cs
- NativeMethods.cs
- ISAPIRuntime.cs
- ExpressionTextBoxAutomationPeer.cs
- Compiler.cs
- ReachIDocumentPaginatorSerializer.cs
- EventMemberCodeDomSerializer.cs
- GeneratedView.cs
- NavigationHelper.cs
- Invariant.cs
- AttributeProviderAttribute.cs
- _KerberosClient.cs
- PopOutPanel.cs
- MetadataCollection.cs
- SchemaImporterExtensionElement.cs
- OleDbWrapper.cs
- ByteStream.cs
- SID.cs
- RelationshipConverter.cs
- CopyNamespacesAction.cs
- StorageBasedPackageProperties.cs
- HtmlHead.cs
- IntPtr.cs
- ActivityXamlServices.cs
- PenThreadWorker.cs
- CompilerTypeWithParams.cs
- MenuItemCollectionEditor.cs
- QueryOutputWriter.cs
- OdbcConnectionHandle.cs
- AutomationIdentifierGuids.cs
- ExpressionDumper.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- Matrix3DConverter.cs
- ModelPropertyDescriptor.cs
- JoinSymbol.cs
- XPathSingletonIterator.cs
- BoolExpressionVisitors.cs
- DataGridViewTopRowAccessibleObject.cs
- TimerElapsedEvenArgs.cs
- ItemsControlAutomationPeer.cs
- ForEachAction.cs
- Command.cs
- SqlDataSourceQuery.cs
- _NestedSingleAsyncResult.cs
- IOException.cs
- MulticastDelegate.cs
- EntityDataSourceColumn.cs
- ClickablePoint.cs
- AssemblyContextControlItem.cs
- CategoryGridEntry.cs
- MenuCommands.cs
- ComponentCollection.cs
- DrawingContextWalker.cs
- MetaModel.cs
- SmtpSection.cs
- Canvas.cs
- IIS7UserPrincipal.cs
- AssertSection.cs
- InvokeHandlers.cs
- PopupControlService.cs
- OracleDataAdapter.cs
- StructureChangedEventArgs.cs
- QilName.cs
- SeekStoryboard.cs
- WorkflowRuntime.cs
- IdentityNotMappedException.cs
- Enum.cs
- BaseContextMenu.cs
- SHA384.cs
- mediaclock.cs
- Run.cs
- DynamicPropertyReader.cs
- Parameter.cs
- SecurityUniqueId.cs
- MdiWindowListItemConverter.cs
- XmlSchemaSimpleTypeList.cs
- HTTPAPI_VERSION.cs
- SspiSafeHandles.cs
- ListViewItemMouseHoverEvent.cs
- RepeaterDesigner.cs
- XmlTextReaderImpl.cs
- FunctionDescription.cs
- ColumnMapCopier.cs
- VectorCollection.cs
- PairComparer.cs
- namescope.cs
- InstanceDataCollection.cs
- GlobalProxySelection.cs
- PerfCounters.cs
- Sentence.cs
- WindowAutomationPeer.cs
- MissingMethodException.cs
- StringResourceManager.cs
- TablePattern.cs
- SessionStateItemCollection.cs
- XomlSerializationHelpers.cs
- HtmlTableRowCollection.cs
- MasterPageCodeDomTreeGenerator.cs
- RotateTransform3D.cs
- PackageFilter.cs