Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Xaml / AttributeConverter.cs / 1305376 / AttributeConverter.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Xaml { using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Globalization; using System.Reflection; using System.Collections; using System.Runtime; //AttributeConverter is to convert some XAML-unfriendly attributes (without default ctor) to InstanceDescriptor for XAML serialization //AttributeInfo is a helper class to provide type specfic info for each Attribute class abstract class AttributeInfowhere TAttribute : Attribute { public abstract ConstructorInfo GetConstructor(); public abstract ICollection GetConstructorArguments(TAttribute attribute); //whether to use argumented-ctor for serialization even when there's default ctor public abstract bool LookupConstructionRequiresArguments { get; } } class AttributeConverter : TypeConverter where TAttribute:Attribute where TAttributeInfo:AttributeInfo , new() { TAttributeInfo attributeInfo = new TAttributeInfo(); static ConstructorInfo attributeConstructor = null; ConstructorInfo Constructor { get { //no need to lock here because every thread will generate the same constructor info even in race condition //and cost to get the constructor is relative small if (AttributeConverter .attributeConstructor == null) { AttributeConverter .attributeConstructor = this.attributeInfo.GetConstructor(); } return AttributeConverter .attributeConstructor; } } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(InstanceDescriptor)) { return true; } return base.CanConvertTo(context, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return false; } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType != typeof(InstanceDescriptor)) { return base.ConvertTo(context, culture, value, destinationType); } TAttribute attribute = value as TAttribute; if (attribute == null) { throw FxTrace.Exception.AsError(new ArgumentException( string.Format(CultureInfo.CurrentCulture, SR.AttributeConverter_ValueMustBeAttribute, typeof(TAttribute)), "value")); } return new InstanceDescriptor(this.Constructor, this.attributeInfo.GetConstructorArguments(attribute), true); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HtmlEmptyTagControlBuilder.cs
- FixedHyperLink.cs
- DoubleConverter.cs
- NotifyInputEventArgs.cs
- RegionData.cs
- COM2FontConverter.cs
- SchemaInfo.cs
- BindingGroup.cs
- EventProviderClassic.cs
- DropDownList.cs
- MarkedHighlightComponent.cs
- ToolstripProfessionalRenderer.cs
- DataGridBoolColumn.cs
- SignatureSummaryDialog.cs
- KeyGesture.cs
- WebPartConnectVerb.cs
- PersonalizationStateInfo.cs
- SafeBitVector32.cs
- ColorConvertedBitmapExtension.cs
- BitmapSizeOptions.cs
- MD5.cs
- X509UI.cs
- TransactionContextValidator.cs
- SimplePropertyEntry.cs
- WebPartCloseVerb.cs
- Table.cs
- Triangle.cs
- UnsettableComboBox.cs
- RowBinding.cs
- NotifyInputEventArgs.cs
- TextElementEnumerator.cs
- UpdatePanelTrigger.cs
- Frame.cs
- IIS7UserPrincipal.cs
- Stack.cs
- Int64Storage.cs
- SimpleType.cs
- OracleDataReader.cs
- BitmapEffectDrawingContextWalker.cs
- Misc.cs
- PartialClassGenerationTask.cs
- DataControlPagerLinkButton.cs
- BitmapEffectInputConnector.cs
- sqlmetadatafactory.cs
- GiveFeedbackEventArgs.cs
- StorageAssociationSetMapping.cs
- ConfigurationStrings.cs
- Package.cs
- xdrvalidator.cs
- SqlTrackingWorkflowInstance.cs
- elementinformation.cs
- RandomNumberGenerator.cs
- WeakReference.cs
- RequestTimeoutManager.cs
- Viewport2DVisual3D.cs
- DeclarativeConditionsCollection.cs
- CacheChildrenQuery.cs
- ArrayItemValue.cs
- AssemblyName.cs
- ContextDataSourceView.cs
- BrowserDefinition.cs
- DetailsViewPageEventArgs.cs
- ContractValidationHelper.cs
- ChangeInterceptorAttribute.cs
- GlyphManager.cs
- DocumentEventArgs.cs
- TypeBrowserDialog.cs
- HtmlValidationSummaryAdapter.cs
- SystemKeyConverter.cs
- WsdlParser.cs
- DesignerHelpers.cs
- ScaleTransform3D.cs
- RenameRuleObjectDialog.Designer.cs
- SerializationTrace.cs
- Query.cs
- WindowsFormsLinkLabel.cs
- AttributedMetaModel.cs
- TypeDefinition.cs
- ScriptingRoleServiceSection.cs
- GetPageCompletedEventArgs.cs
- WCFModelStrings.Designer.cs
- PropertyGridDesigner.cs
- Compress.cs
- FormatConvertedBitmap.cs
- KeyConstraint.cs
- DeploymentSection.cs
- FormDesigner.cs
- FixedTextBuilder.cs
- path.cs
- ApplicationGesture.cs
- _DomainName.cs
- _LocalDataStore.cs
- RegexInterpreter.cs
- CompleteWizardStep.cs
- EntityObject.cs
- PropertyItem.cs
- WebPartVerbCollection.cs
- SqlDataRecord.cs
- ItemsPanelTemplate.cs
- ThreadExceptionEvent.cs