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
- GridItemCollection.cs
- NavigatingCancelEventArgs.cs
- XmlSequenceWriter.cs
- SlotInfo.cs
- DataExpression.cs
- ColorMap.cs
- ToolStripContentPanelDesigner.cs
- BasicExpandProvider.cs
- XmlUtf8RawTextWriter.cs
- DocumentPageView.cs
- NetworkAddressChange.cs
- DSASignatureFormatter.cs
- SymbolEqualComparer.cs
- FormView.cs
- Odbc32.cs
- DbgUtil.cs
- ByteStack.cs
- XmlElementList.cs
- SQLRoleProvider.cs
- TableRow.cs
- CacheRequest.cs
- PolyQuadraticBezierSegment.cs
- ListViewAutomationPeer.cs
- Wizard.cs
- CompilerHelpers.cs
- GenericWebPart.cs
- ProfilePropertyNameValidator.cs
- ObfuscationAttribute.cs
- SafeCryptoHandles.cs
- CustomCategoryAttribute.cs
- WebHttpBindingCollectionElement.cs
- CheckBoxList.cs
- BaseParaClient.cs
- PanningMessageFilter.cs
- Properties.cs
- lengthconverter.cs
- TreeNode.cs
- AffineTransform3D.cs
- ConfigurationManager.cs
- CodeDOMUtility.cs
- SqlServer2KCompatibilityCheck.cs
- RequestStatusBarUpdateEventArgs.cs
- PagerStyle.cs
- OdbcException.cs
- DocumentGridPage.cs
- TextRunCache.cs
- OpCodes.cs
- EntityDataSourceWrapper.cs
- BordersPage.cs
- HttpHandlerAction.cs
- ManipulationDevice.cs
- TextEditor.cs
- TaskFormBase.cs
- ETagAttribute.cs
- CustomPopupPlacement.cs
- LinkedList.cs
- SqlFacetAttribute.cs
- XDRSchema.cs
- SqlTransaction.cs
- XmlDataLoader.cs
- DrawingDrawingContext.cs
- XmlBaseReader.cs
- Margins.cs
- StringUtil.cs
- DependencyProperty.cs
- ApplicationSecurityManager.cs
- CodeObjectCreateExpression.cs
- XmlStringTable.cs
- _SslSessionsCache.cs
- Composition.cs
- WindowsScrollBar.cs
- ReachDocumentReferenceSerializerAsync.cs
- IFormattable.cs
- AuthenticationService.cs
- XmlSchemaAny.cs
- TextEvent.cs
- AbandonedMutexException.cs
- PropertyInfoSet.cs
- ApplicationContext.cs
- WebControlAdapter.cs
- JavaScriptString.cs
- TypeInformation.cs
- RuntimeComponentFilter.cs
- ProfileSettingsCollection.cs
- UnknownBitmapEncoder.cs
- arabicshape.cs
- GridViewUpdateEventArgs.cs
- RotateTransform3D.cs
- wmiutil.cs
- KeyProperty.cs
- FindCriteriaCD1.cs
- IsolationInterop.cs
- PieceNameHelper.cs
- DiagnosticsConfigurationHandler.cs
- GridViewActionList.cs
- Pen.cs
- RotateTransform3D.cs
- DataGridHeaderBorder.cs
- ClipboardData.cs
- PerformanceCounter.cs