Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------- // 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
- SqlCacheDependencyDatabaseCollection.cs
- nulltextnavigator.cs
- PersonalizationProviderHelper.cs
- XmlSchemaElement.cs
- ModuleConfigurationInfo.cs
- MexHttpsBindingElement.cs
- ObjectDataSourceDisposingEventArgs.cs
- FixedSOMTableCell.cs
- SharedStatics.cs
- GeometryModel3D.cs
- dataSvcMapFileLoader.cs
- Glyph.cs
- WebPartsPersonalization.cs
- XslException.cs
- Scene3D.cs
- MdbDataFileEditor.cs
- BoundField.cs
- System.Data_BID.cs
- Int32RectConverter.cs
- BidOverLoads.cs
- InvalidDataException.cs
- WriterOutput.cs
- OpenCollectionAsyncResult.cs
- OdbcConnectionString.cs
- ErrorItem.cs
- CodeTypeReferenceSerializer.cs
- DataGridItemCollection.cs
- DocumentViewerBaseAutomationPeer.cs
- HttpRequestCacheValidator.cs
- XmlObjectSerializerReadContextComplexJson.cs
- TypeUnloadedException.cs
- DigestTraceRecordHelper.cs
- WebRequestModuleElementCollection.cs
- ReadOnlyMetadataCollection.cs
- BooleanExpr.cs
- SystemInfo.cs
- CompiledQueryCacheKey.cs
- CompiledIdentityConstraint.cs
- WebServiceHandler.cs
- WindowHideOrCloseTracker.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- EventSetter.cs
- GeometryHitTestResult.cs
- ContextMenu.cs
- CompilerParameters.cs
- ImageAutomationPeer.cs
- RectValueSerializer.cs
- PowerStatus.cs
- AutoResizedEvent.cs
- DynamicDocumentPaginator.cs
- ElementNotEnabledException.cs
- Thread.cs
- EtwTrace.cs
- LayoutSettings.cs
- UIHelper.cs
- AttachedPropertyBrowsableAttribute.cs
- MatrixTransform.cs
- WindowsListViewItemCheckBox.cs
- PropertyDescriptorCollection.cs
- SerializableAttribute.cs
- NativeMethods.cs
- oledbconnectionstring.cs
- UrlPath.cs
- CursorInteropHelper.cs
- StrictAndMessageFilter.cs
- EntityContainerEmitter.cs
- NoneExcludedImageIndexConverter.cs
- RotateTransform3D.cs
- ProcessHostConfigUtils.cs
- EmptyEnumerator.cs
- Transform3DCollection.cs
- MethodAccessException.cs
- ProfileSettings.cs
- followingsibling.cs
- SharedPerformanceCounter.cs
- StringArrayEditor.cs
- SrgsDocumentParser.cs
- ComboBoxDesigner.cs
- TypeConverterAttribute.cs
- FixedFlowMap.cs
- DefaultTextStoreTextComposition.cs
- SecurityHeader.cs
- EventListener.cs
- BaseAsyncResult.cs
- InkCanvasFeedbackAdorner.cs
- TableItemPatternIdentifiers.cs
- XmlObjectSerializerReadContext.cs
- Hyperlink.cs
- CreateUserWizard.cs
- TrackingMemoryStream.cs
- HttpCacheVaryByContentEncodings.cs
- figurelength.cs
- ProfileInfo.cs
- KeySpline.cs
- SimpleRecyclingCache.cs
- AutoScrollHelper.cs
- SchemaCompiler.cs
- EntityConnectionStringBuilderItem.cs
- messageonlyhwndwrapper.cs
- DataGridViewToolTip.cs