Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ExtensionDataObject.cs
- PieceDirectory.cs
- ComponentCollection.cs
- Rect3DValueSerializer.cs
- SafeRegistryHandle.cs
- TemplateControlBuildProvider.cs
- EntityDataSourceColumn.cs
- SessionEndedEventArgs.cs
- BmpBitmapDecoder.cs
- EntityDataSourceSelectingEventArgs.cs
- ProcessingInstructionAction.cs
- DataGridCaption.cs
- XmlnsDictionary.cs
- SiblingIterators.cs
- TrackingProfileCache.cs
- CodeSnippetTypeMember.cs
- HtmlGenericControl.cs
- ConsoleTraceListener.cs
- PageOutputQuality.cs
- HealthMonitoringSectionHelper.cs
- EventLog.cs
- UITypeEditor.cs
- NamespaceQuery.cs
- TreeChangeInfo.cs
- ToolBar.cs
- XmlSchemaCompilationSettings.cs
- SettingsSavedEventArgs.cs
- PrintDialog.cs
- CodeTypeMember.cs
- XmlNavigatorStack.cs
- WebPartMinimizeVerb.cs
- EnumValAlphaComparer.cs
- NativeCompoundFileAPIs.cs
- MachineKeyConverter.cs
- StylusPointDescription.cs
- dataSvcMapFileLoader.cs
- LinqTreeNodeEvaluator.cs
- PointConverter.cs
- DataSourceXmlSerializationAttribute.cs
- DesignerSelectionListAdapter.cs
- ProxyGenerationError.cs
- Lease.cs
- LineServicesRun.cs
- HttpDictionary.cs
- CharacterBuffer.cs
- GCHandleCookieTable.cs
- ModulesEntry.cs
- FormsAuthenticationUserCollection.cs
- BackgroundFormatInfo.cs
- UnitySerializationHolder.cs
- TemplateControlParser.cs
- ResetableIterator.cs
- DateTimeValueSerializerContext.cs
- ResourceSet.cs
- PageWrapper.cs
- AssociationSetEnd.cs
- Transform3D.cs
- FormattedText.cs
- FixedPage.cs
- DistributedTransactionPermission.cs
- ButtonStandardAdapter.cs
- FastEncoderStatics.cs
- MultipleViewPattern.cs
- XmlHierarchyData.cs
- MsmqIntegrationProcessProtocolHandler.cs
- EntityDataSourceUtil.cs
- XmlValidatingReader.cs
- ObjectResult.cs
- controlskin.cs
- XmlSchemaSubstitutionGroup.cs
- DragCompletedEventArgs.cs
- CngKeyCreationParameters.cs
- NaturalLanguageHyphenator.cs
- Catch.cs
- HelpInfo.cs
- StylusPlugin.cs
- Soap12ServerProtocol.cs
- TargetInvocationException.cs
- XmlElement.cs
- ProtocolViolationException.cs
- QilLiteral.cs
- TextEncodedRawTextWriter.cs
- VScrollProperties.cs
- StickyNote.cs
- EntityDataSource.cs
- TrackingDataItemValue.cs
- ErrorRuntimeConfig.cs
- TabControl.cs
- AnimationStorage.cs
- PhonemeConverter.cs
- SqlCommandBuilder.cs
- DataViewSetting.cs
- CryptoStream.cs
- QuadraticBezierSegment.cs
- BrowserDefinition.cs
- WebRequestModuleElementCollection.cs
- SchemaMapping.cs
- TextInfo.cs
- XMLUtil.cs
- XPathNode.cs