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, EventHandler handler)
{
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, EventHandler handler)
{
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 ReadOnlyObservableCollection GetErrors(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 ReadOnlyCollection
private 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
- AttributeSetAction.cs
- RestClientProxyHandler.cs
- StoragePropertyMapping.cs
- InheritanceContextHelper.cs
- JournalNavigationScope.cs
- ProviderException.cs
- RawStylusInputCustomData.cs
- StructuredType.cs
- CompensationDesigner.cs
- NetworkAddressChange.cs
- ConfigurationElement.cs
- SecurityHeaderLayout.cs
- NativeMethods.cs
- UInt16.cs
- StreamFormatter.cs
- StrokeNodeData.cs
- recordstatefactory.cs
- PathGradientBrush.cs
- LogArchiveSnapshot.cs
- DownloadProgressEventArgs.cs
- Win32Native.cs
- SID.cs
- SemaphoreFullException.cs
- RadioButton.cs
- SecurityUtils.cs
- SigningProgress.cs
- CompilerHelpers.cs
- FilterEventArgs.cs
- Screen.cs
- RankException.cs
- SamlSecurityToken.cs
- GridItemProviderWrapper.cs
- ResourceBinder.cs
- UnsignedPublishLicense.cs
- XmlSchemaAnnotation.cs
- IncomingWebResponseContext.cs
- UInt32.cs
- XhtmlConformanceSection.cs
- IdentitySection.cs
- DataGridViewRowsRemovedEventArgs.cs
- DataControlImageButton.cs
- EpmSyndicationContentSerializer.cs
- TraceLevelStore.cs
- SQLStringStorage.cs
- StringAnimationBase.cs
- TreeNodeStyleCollection.cs
- Action.cs
- LayoutManager.cs
- SpecialFolderEnumConverter.cs
- cookiecollection.cs
- Form.cs
- TraceContext.cs
- RoutedEvent.cs
- nulltextnavigator.cs
- TreeNodeStyleCollectionEditor.cs
- UnmanagedMemoryStream.cs
- CacheModeValueSerializer.cs
- Enlistment.cs
- LayoutExceptionEventArgs.cs
- MSG.cs
- KeyboardDevice.cs
- Stopwatch.cs
- BitmapEffectvisualstate.cs
- StringFunctions.cs
- MonthCalendarDesigner.cs
- Point3DCollectionValueSerializer.cs
- ElementsClipboardData.cs
- ItemTypeToolStripMenuItem.cs
- RegexCompiler.cs
- ServiceModelActivity.cs
- DataGridParentRows.cs
- precedingsibling.cs
- DataSourceCache.cs
- CompilerInfo.cs
- WebPartHeaderCloseVerb.cs
- WebConfigurationHostFileChange.cs
- InvalidCastException.cs
- ComponentConverter.cs
- ASCIIEncoding.cs
- Table.cs
- ListViewPagedDataSource.cs
- IdleTimeoutMonitor.cs
- InkPresenter.cs
- SkipQueryOptionExpression.cs
- oledbmetadatacollectionnames.cs
- HtmlFormWrapper.cs
- WinInet.cs
- XPathQilFactory.cs
- WsatAdminException.cs
- TableCell.cs
- EventMappingSettingsCollection.cs
- SafeReversePInvokeHandle.cs
- NativeRecognizer.cs
- DataSourceCacheDurationConverter.cs
- XmlDownloadManager.cs
- AnimationTimeline.cs
- TypeContext.cs
- FullTextBreakpoint.cs
- MediaSystem.cs
- ContentPlaceHolder.cs