Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / XamlUtilities.cs / 1305376 / XamlUtilities.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System; using System.Collections; using System.ComponentModel; using System.Reflection; internal static class XamlUtilities { static Hashtable converterCache; static object converterCacheSyncObject = new object(); public static TypeConverter GetConverter(Type itemType) { TypeConverter converter = TypeDescriptor.GetConverter(itemType); if (converter == null || converter.GetType() == typeof(TypeConverter)) { // We got an invalid converter. WPF will do this if the converter // is internal, but we use internal converters all over the place // at design time. Detect this and build the converter ourselves. if (converterCache != null) { converter = (TypeConverter)converterCache[itemType]; if (converter != null) { return converter; } } AttributeCollection attrs = TypeDescriptor.GetAttributes(itemType); TypeConverterAttribute tca = attrs[typeof(TypeConverterAttribute)] as TypeConverterAttribute; if (tca != null && tca.ConverterTypeName != null) { Type type = Type.GetType(tca.ConverterTypeName); if (type != null && !type.IsPublic && typeof(TypeConverter).IsAssignableFrom(type)) { ConstructorInfo ctor = type.GetConstructor(new Type[] { typeof(Type) }); if (ctor != null) { converter = (TypeConverter)ctor.Invoke(new object[] { itemType }); } else { converter = (TypeConverter)Activator.CreateInstance(type); } lock (converterCacheSyncObject) { if (converterCache == null) { converterCache = new Hashtable(); // Listen to type changes and clear the cache. // This allows new metadata tables to be installed TypeDescriptor.Refreshed += delegate(RefreshEventArgs args) { converterCache.Remove(args.TypeChanged); }; } converterCache[itemType] = converter; } } } } return converter; } } } // 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
- PrimitiveSchema.cs
- SessionEndingCancelEventArgs.cs
- NotFiniteNumberException.cs
- DynamicDataRoute.cs
- ConsoleCancelEventArgs.cs
- ReferencedType.cs
- RuntimeVariablesExpression.cs
- LOSFormatter.cs
- SqlError.cs
- SmtpFailedRecipientsException.cs
- ResourceBinder.cs
- EventEntry.cs
- StrongNameMembershipCondition.cs
- HtmlTableCell.cs
- SpecialNameAttribute.cs
- HttpCookie.cs
- Exception.cs
- RuntimeEnvironment.cs
- ValuePattern.cs
- SendAgentStatusRequest.cs
- HttpPostedFile.cs
- TypeNameHelper.cs
- XhtmlConformanceSection.cs
- HashHelper.cs
- StrongNameMembershipCondition.cs
- EdmEntityTypeAttribute.cs
- bidPrivateBase.cs
- StrongBox.cs
- ObjectStateManager.cs
- TextTreeTextElementNode.cs
- Cloud.cs
- Compress.cs
- ObjectAnimationUsingKeyFrames.cs
- EditModeSwitchButton.cs
- AssociationProvider.cs
- PageVisual.cs
- PresentationUIStyleResources.cs
- DataGridViewImageColumn.cs
- DeploymentExceptionMapper.cs
- InfocardInteractiveChannelInitializer.cs
- PhysicalOps.cs
- BufferedGraphicsManager.cs
- UseLicense.cs
- DataPagerFieldCommandEventArgs.cs
- RTLAwareMessageBox.cs
- FixedDSBuilder.cs
- NaturalLanguageHyphenator.cs
- ResizeGrip.cs
- Type.cs
- DefaultPrintController.cs
- MemberRelationshipService.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- Parsers.cs
- ScrollBarAutomationPeer.cs
- RegisteredDisposeScript.cs
- CultureInfo.cs
- Win32.cs
- CompositionAdorner.cs
- WmlPhoneCallAdapter.cs
- PartialCachingAttribute.cs
- CursorConverter.cs
- Debug.cs
- SetIterators.cs
- SQLInt16.cs
- VectorCollection.cs
- ContainerSelectorGlyph.cs
- TabControlAutomationPeer.cs
- RectangleGeometry.cs
- TextRangeEditTables.cs
- LeaseManager.cs
- WebReferencesBuildProvider.cs
- ComponentGlyph.cs
- WebPartMenuStyle.cs
- QuaternionAnimationUsingKeyFrames.cs
- ProgressBar.cs
- ConditionCollection.cs
- SoapInteropTypes.cs
- ArrangedElementCollection.cs
- ClientProxyGenerator.cs
- GeometryDrawing.cs
- IdentityElement.cs
- ResourceExpression.cs
- OdbcConnectionOpen.cs
- Enum.cs
- RepeatButton.cs
- _AutoWebProxyScriptHelper.cs
- HttpHeaderCollection.cs
- DependencyStoreSurrogate.cs
- FieldBuilder.cs
- AnimationClockResource.cs
- XdrBuilder.cs
- InitialServerConnectionReader.cs
- unsafenativemethodsother.cs
- UrlMappingCollection.cs
- DrawItemEvent.cs
- SymbolTable.cs
- DbConnectionPoolGroup.cs
- ErrorLog.cs
- Boolean.cs
- ClientScriptManagerWrapper.cs