Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Base / System / Windows / AttachedPropertyBrowsableForTypeAttribute.cs / 1 / 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
- AttributeQuery.cs
- XmlBindingWorker.cs
- WebPartConnectionsCancelEventArgs.cs
- Fonts.cs
- GCHandleCookieTable.cs
- ConstantProjectedSlot.cs
- DataBinder.cs
- TransportReplyChannelAcceptor.cs
- TabPageDesigner.cs
- RectangleGeometry.cs
- AvTraceFormat.cs
- TextTreeRootTextBlock.cs
- GeometryCollection.cs
- WebHttpSecurityElement.cs
- Errors.cs
- ObjectAnimationUsingKeyFrames.cs
- CryptoKeySecurity.cs
- DefaultAsyncDataDispatcher.cs
- StaticFileHandler.cs
- SecurityContext.cs
- SecurityPermission.cs
- ReleaseInstanceMode.cs
- URL.cs
- JsonFormatWriterGenerator.cs
- NumberSubstitution.cs
- ElementFactory.cs
- OverflowException.cs
- FormDesigner.cs
- MulticastIPAddressInformationCollection.cs
- SSmlParser.cs
- InternalMappingException.cs
- DatagridviewDisplayedBandsData.cs
- SqlBuilder.cs
- NestedContainer.cs
- LassoHelper.cs
- Scene3D.cs
- DataServiceProviderWrapper.cs
- XPathParser.cs
- ElementNotEnabledException.cs
- Matrix3D.cs
- ProxyManager.cs
- ExceptionCollection.cs
- SequenceFullException.cs
- ExternalException.cs
- CodeDelegateInvokeExpression.cs
- ParserHooks.cs
- DbgUtil.cs
- SmtpMail.cs
- WindowsGrip.cs
- ConvertTextFrag.cs
- MenuItem.cs
- XmlAttributes.cs
- DelimitedListTraceListener.cs
- InputMethodStateChangeEventArgs.cs
- TrackingMemoryStreamFactory.cs
- SmiMetaDataProperty.cs
- InstanceLockQueryResult.cs
- WebDisplayNameAttribute.cs
- OrderedDictionary.cs
- RenderDataDrawingContext.cs
- ReadOnlyState.cs
- DoubleLinkListEnumerator.cs
- ParameterElement.cs
- _NativeSSPI.cs
- HttpWriter.cs
- XmlSignificantWhitespace.cs
- XmlSchemaInclude.cs
- EventHandlersStore.cs
- SafeHandles.cs
- Inline.cs
- ButtonBaseAdapter.cs
- DataDocumentXPathNavigator.cs
- ListViewHitTestInfo.cs
- dataobject.cs
- SortQueryOperator.cs
- SchemaCollectionPreprocessor.cs
- comcontractssection.cs
- DateTimeFormatInfoScanner.cs
- SafeWaitHandle.cs
- RelatedPropertyManager.cs
- RuntimeResourceSet.cs
- FixedDocumentPaginator.cs
- HitTestWithPointDrawingContextWalker.cs
- TableProviderWrapper.cs
- AudioLevelUpdatedEventArgs.cs
- DictionaryEntry.cs
- MsmqElementBase.cs
- ListComponentEditor.cs
- NotSupportedException.cs
- cookie.cs
- ACE.cs
- ValueType.cs
- ConsoleEntryPoint.cs
- SecurityElement.cs
- DbXmlEnabledProviderManifest.cs
- AvTraceFormat.cs
- DataGridColumnReorderingEventArgs.cs
- AssignDesigner.xaml.cs
- Matrix.cs
- TypeSemantics.cs