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
- ComponentConverter.cs
- ComponentSerializationService.cs
- __TransparentProxy.cs
- SigningCredentials.cs
- TrustManager.cs
- ListView.cs
- documentsequencetextcontainer.cs
- ModelTreeManager.cs
- DecimalKeyFrameCollection.cs
- StorageComplexTypeMapping.cs
- EmbeddedMailObjectsCollection.cs
- Triangle.cs
- safePerfProviderHandle.cs
- FontDriver.cs
- FormattedText.cs
- WhitespaceRuleReader.cs
- ListViewInsertEventArgs.cs
- EventSchemaTraceListener.cs
- IteratorFilter.cs
- HtmlPageAdapter.cs
- TrackingDataItem.cs
- WebBrowser.cs
- DbParameterCollectionHelper.cs
- XmlSchemaSimpleTypeRestriction.cs
- CommandHelper.cs
- EntityClientCacheKey.cs
- FilterElement.cs
- PageVisual.cs
- TerminatorSinks.cs
- WebPartConnection.cs
- UIElementPropertyUndoUnit.cs
- WindowInteractionStateTracker.cs
- ListComponentEditorPage.cs
- SqlDataSourceConfigureFilterForm.cs
- Path.cs
- QilBinary.cs
- SingleObjectCollection.cs
- RegexReplacement.cs
- SkipStoryboardToFill.cs
- Int64AnimationUsingKeyFrames.cs
- odbcmetadatacolumnnames.cs
- connectionpool.cs
- OdbcPermission.cs
- StrongNamePublicKeyBlob.cs
- WebPartsPersonalizationAuthorization.cs
- OdbcDataReader.cs
- DataGridViewImageCell.cs
- CertificateManager.cs
- XslCompiledTransform.cs
- DesignerView.xaml.cs
- WebPartUtil.cs
- Processor.cs
- DataGridCellClipboardEventArgs.cs
- VisualBrush.cs
- TrackBar.cs
- Metafile.cs
- RelatedCurrencyManager.cs
- AssociationTypeEmitter.cs
- SplitterEvent.cs
- DoubleCollectionConverter.cs
- ProviderUtil.cs
- PointUtil.cs
- Button.cs
- BlurBitmapEffect.cs
- ClipboardData.cs
- TrackingServices.cs
- XmlTextEncoder.cs
- FlagsAttribute.cs
- FormViewPageEventArgs.cs
- XamlPointCollectionSerializer.cs
- RectangleF.cs
- TextContainerHelper.cs
- CodeAttributeArgumentCollection.cs
- NonClientArea.cs
- ProcessInfo.cs
- Pair.cs
- ConversionContext.cs
- CodeCastExpression.cs
- StorageMappingItemLoader.cs
- MailAddressCollection.cs
- SweepDirectionValidation.cs
- ToolStripLocationCancelEventArgs.cs
- ParameterBuilder.cs
- CapabilitiesState.cs
- DynamicUpdateCommand.cs
- SHA1.cs
- ProcessModelInfo.cs
- RecognitionResult.cs
- WmlPageAdapter.cs
- DeviceSpecificChoice.cs
- TimeIntervalCollection.cs
- ContractMethodParameterInfo.cs
- SocketPermission.cs
- EntityConnectionStringBuilder.cs
- BufferedWebEventProvider.cs
- CodeStatementCollection.cs
- PerformanceCounter.cs
- EditingMode.cs
- HtmlInputFile.cs
- ParseNumbers.cs