Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Windows / AttachedPropertyBrowsableForTypeAttribute.cs / 1305600 / AttachedPropertyBrowsableForTypeAttribute.cs
namespace System.Windows
{
using System;
///
/// This class declares that an attached property is browsable only
/// for dependency objects that derive from the given type. If more
/// than one type is specified, the property is browsable if any type
/// matches (logical or). The type may also be an interface.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class AttachedPropertyBrowsableForTypeAttribute : AttachedPropertyBrowsableAttribute
{
//------------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
///
/// Creates a new AttachedPropertyBrowsableForTypeAttribute. Provide the type
/// you want the attached property to be browsable for. Multiple
/// attributes may be used to provide support for more than one
/// type.
///
public AttachedPropertyBrowsableForTypeAttribute(Type targetType)
{
if (targetType == null) throw new ArgumentNullException("targetType");
_targetType = targetType;
}
//-----------------------------------------------------
//
// Public Properties
//
//-----------------------------------------------------
///
/// Returns the type passed into the constructor.
///
public Type TargetType
{
get
{
return _targetType;
}
}
///
/// For AllowMultiple attributes, TypeId must be unique for
/// each unique instance. The default returns the type, which
/// is only correct for AllowMultiple == false.
///
public override object TypeId
{
get
{
return this;
}
}
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
///
/// Overrides Object.Equals to implement correct equality semantics for this
/// attribute.
///
public override bool Equals(object obj)
{
AttachedPropertyBrowsableForTypeAttribute other = obj as AttachedPropertyBrowsableForTypeAttribute;
if (other == null) return false;
return _targetType == other._targetType;
}
///
/// Overrides Object.GetHashCode to implement correct hashing semantics.
///
public override int GetHashCode()
{
return _targetType.GetHashCode();
}
//------------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
///
/// Returns true if the dependency object passed to the method is a type,
/// subtype or implememts the interface of any of the the types contained
/// in this object.
///
internal override bool IsBrowsable(DependencyObject d, DependencyProperty dp)
{
if (d == null) throw new ArgumentNullException("d");
if (dp == null) throw new ArgumentNullException("dp");
// Get the dependency object type for our target type.
// We cannot assume the user didn't do something wrong and
// feed us a type that is not a dependency object, but that is
// rare enough that it is worth the try/catch here rather than
// a double IsAssignableFrom (one here, and one in DependencyObjectType).
// We still use a flag here rather than checking for a null
// _dTargetType so that a bad property that throws won't consistently
// slow the system down with ArgumentExceptions.
if (!_dTargetTypeChecked)
{
try
{
_dTargetType = DependencyObjectType.FromSystemType(_targetType);
}
catch(ArgumentException)
{
}
_dTargetTypeChecked = true;
}
if (_dTargetType != null && _dTargetType.IsInstanceOfType(d))
{
return true;
}
return false;
}
///
/// Returns true if a browsable match is true if any one of multiple
/// instances of the same type return true for IsBrowsable. We override
/// this to return true because any one of a successfull match for
/// IsBrowsable is accepted.
///
internal override bool UnionResults
{
get
{
return true;
}
}
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
private Type _targetType;
private DependencyObjectType _dTargetType;
private bool _dTargetTypeChecked;
}
}
// 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
- Helpers.cs
- GrammarBuilder.cs
- LinkClickEvent.cs
- TextFragmentEngine.cs
- FreezableCollection.cs
- _NegoStream.cs
- HttpPostedFile.cs
- NamedPipeProcessProtocolHandler.cs
- ContainerParagraph.cs
- RelationshipSet.cs
- PenContexts.cs
- MetadataException.cs
- SqlMultiplexer.cs
- GridErrorDlg.cs
- FileDialogCustomPlace.cs
- XmlComment.cs
- IntSecurity.cs
- ClientBuildManager.cs
- PermissionSetEnumerator.cs
- DataFormat.cs
- DataViewListener.cs
- HandlerFactoryWrapper.cs
- ListSortDescriptionCollection.cs
- XomlSerializationHelpers.cs
- FileCodeGroup.cs
- RuntimeIdentifierPropertyAttribute.cs
- ContainerActivationHelper.cs
- AnonymousIdentificationModule.cs
- PromptEventArgs.cs
- HttpClientChannel.cs
- DateTimeStorage.cs
- DaylightTime.cs
- HtmlLink.cs
- SmtpDigestAuthenticationModule.cs
- XmlnsCache.cs
- IndentedTextWriter.cs
- HitTestWithGeometryDrawingContextWalker.cs
- PassportAuthenticationEventArgs.cs
- TableItemProviderWrapper.cs
- DataServiceBehavior.cs
- AppDomainResourcePerfCounters.cs
- CrossSiteScriptingValidation.cs
- Instrumentation.cs
- GroupLabel.cs
- PcmConverter.cs
- CompilerWrapper.cs
- ToolStripSettings.cs
- TextRangeAdaptor.cs
- ResolveMatches11.cs
- UrlRoutingHandler.cs
- basenumberconverter.cs
- Models.cs
- BufferedGraphics.cs
- TimeoutException.cs
- TextEvent.cs
- ZipIOBlockManager.cs
- XmlSchemaElement.cs
- TextContainerChangedEventArgs.cs
- CompilerCollection.cs
- DetailsViewPagerRow.cs
- ResourcesChangeInfo.cs
- WebPartMenu.cs
- WebPartZoneDesigner.cs
- RegexGroup.cs
- NamedPermissionSet.cs
- RadioButtonPopupAdapter.cs
- TransformCollection.cs
- XmlNode.cs
- DockPattern.cs
- XmlAttributeProperties.cs
- ProgressBarRenderer.cs
- DataTablePropertyDescriptor.cs
- ContainerControl.cs
- Item.cs
- sitestring.cs
- DebugViewWriter.cs
- XmlSchemaValidator.cs
- HttpClientCertificate.cs
- XmlSerializerFactory.cs
- WebControlToolBoxItem.cs
- TextEncodedRawTextWriter.cs
- FormViewRow.cs
- DbDataRecord.cs
- MessageQueueCriteria.cs
- GuidelineSet.cs
- DocumentSchemaValidator.cs
- SqlServices.cs
- ListViewSortEventArgs.cs
- FontStretchConverter.cs
- MetadataItemSerializer.cs
- WeakReference.cs
- CacheEntry.cs
- RectangleGeometry.cs
- ColumnMapCopier.cs
- Timeline.cs
- EasingQuaternionKeyFrame.cs
- Rect3DConverter.cs
- PageHandlerFactory.cs
- ScaleTransform3D.cs
- InfoCardServiceInstallComponent.cs