Code:
/ 4.0 / 4.0 / 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. 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
- UnknownWrapper.cs
- ColorDialog.cs
- WebPartEditorCancelVerb.cs
- _UncName.cs
- CompositionTarget.cs
- RtfToXamlLexer.cs
- AttributeUsageAttribute.cs
- ZeroOpNode.cs
- CodeAccessSecurityEngine.cs
- PocoEntityKeyStrategy.cs
- Win32SafeHandles.cs
- NavigationWindow.cs
- NameValueConfigurationElement.cs
- CipherData.cs
- VisualTreeUtils.cs
- WindowsTokenRoleProvider.cs
- KeyValueInternalCollection.cs
- UnknownWrapper.cs
- XmlDataProvider.cs
- ObjectTag.cs
- XmlTextReader.cs
- InvalidChannelBindingException.cs
- TextFormatterImp.cs
- HGlobalSafeHandle.cs
- TitleStyle.cs
- EntityClientCacheKey.cs
- ToolStripContentPanelRenderEventArgs.cs
- StrokeNodeEnumerator.cs
- DataKeyCollection.cs
- CmsUtils.cs
- ProfessionalColorTable.cs
- QueryUtil.cs
- ArcSegment.cs
- XmlChildNodes.cs
- COM2ExtendedUITypeEditor.cs
- sqlinternaltransaction.cs
- ReflectionTypeLoadException.cs
- FontStretch.cs
- SmtpFailedRecipientsException.cs
- MultiPropertyDescriptorGridEntry.cs
- CalloutQueueItem.cs
- InfoCardXmlSerializer.cs
- METAHEADER.cs
- CodeExpressionStatement.cs
- CurrencyWrapper.cs
- QueryCacheManager.cs
- Range.cs
- DBDataPermission.cs
- CompressEmulationStream.cs
- WebPartCollection.cs
- RelationshipEndMember.cs
- RolePrincipal.cs
- PolyLineSegment.cs
- SqlHelper.cs
- SuppressMessageAttribute.cs
- WebServiceReceiveDesigner.cs
- WebRequestModuleElement.cs
- BypassElementCollection.cs
- PerformanceCounterCategory.cs
- HttpApplicationFactory.cs
- SettingsPropertyWrongTypeException.cs
- TcpAppDomainProtocolHandler.cs
- PolyLineSegmentFigureLogic.cs
- InfoCardConstants.cs
- _BufferOffsetSize.cs
- TransformedBitmap.cs
- LessThanOrEqual.cs
- XmlUtf8RawTextWriter.cs
- WebControlParameterProxy.cs
- HoistedLocals.cs
- DurableTimerExtension.cs
- UnknownBitmapDecoder.cs
- AssociationTypeEmitter.cs
- RegexMatchCollection.cs
- ConfigXmlComment.cs
- TCEAdapterGenerator.cs
- ReaderWriterLock.cs
- Margins.cs
- BuiltInPermissionSets.cs
- TabItemWrapperAutomationPeer.cs
- QueryStringParameter.cs
- Size3D.cs
- DeleteStoreRequest.cs
- XmlBinaryReaderSession.cs
- HWStack.cs
- ReliabilityContractAttribute.cs
- FilterEventArgs.cs
- OledbConnectionStringbuilder.cs
- Form.cs
- WindowsComboBox.cs
- ListViewGroupConverter.cs
- StrokeDescriptor.cs
- TypeSystemHelpers.cs
- TraceHandlerErrorFormatter.cs
- CodeIdentifier.cs
- AlgoModule.cs
- EntityTypeEmitter.cs
- ActivationServices.cs
- DataColumnMapping.cs
- WSSecurityJan2004.cs