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
- QueueProcessor.cs
- ConvertTextFrag.cs
- Module.cs
- ClockGroup.cs
- EventLogEntryCollection.cs
- HyperLinkField.cs
- ApplicationFileParser.cs
- DataSourceControl.cs
- HScrollProperties.cs
- RepeatBehavior.cs
- HwndSourceKeyboardInputSite.cs
- designeractionbehavior.cs
- UInt32.cs
- ToolStripContainer.cs
- PathFigureCollection.cs
- ArgumentDirectionHelper.cs
- UserPrincipalNameElement.cs
- GeneralTransform3DTo2D.cs
- ClientSettingsStore.cs
- TranslateTransform3D.cs
- ListControl.cs
- BufferedWebEventProvider.cs
- Operators.cs
- ModelUtilities.cs
- XmlUtf8RawTextWriter.cs
- _LocalDataStore.cs
- MediaTimeline.cs
- SecurityResources.cs
- CollectionExtensions.cs
- NoClickablePointException.cs
- SystemParameters.cs
- PropertyIDSet.cs
- FrameworkElement.cs
- PrimaryKeyTypeConverter.cs
- ListControlConvertEventArgs.cs
- SqlUnionizer.cs
- Line.cs
- namescope.cs
- ToolStripRenderer.cs
- HtmlAnchor.cs
- DurableEnlistmentState.cs
- KeyInfo.cs
- DeflateInput.cs
- WebPartsPersonalization.cs
- SignerInfo.cs
- HiddenFieldPageStatePersister.cs
- ConsumerConnectionPointCollection.cs
- SafeProcessHandle.cs
- ProtocolInformationWriter.cs
- MailWebEventProvider.cs
- ExtensibleClassFactory.cs
- TypedTableGenerator.cs
- CommandConverter.cs
- MessageVersion.cs
- EventDescriptor.cs
- ConnectionString.cs
- CheckBoxPopupAdapter.cs
- PerformanceCounterTraceRecord.cs
- WebPartConnectionsCancelVerb.cs
- ReflectionPermission.cs
- TextSpan.cs
- ExecutionProperties.cs
- ScriptReference.cs
- ProgressBar.cs
- ComponentEditorForm.cs
- CryptoConfig.cs
- SafeReadContext.cs
- pingexception.cs
- DataGridViewRowCancelEventArgs.cs
- DataObjectMethodAttribute.cs
- StrokeDescriptor.cs
- WebPartExportVerb.cs
- StrongNamePublicKeyBlob.cs
- Compilation.cs
- DriveInfo.cs
- PointKeyFrameCollection.cs
- X509PeerCertificateAuthentication.cs
- SpeechSeg.cs
- DesignBindingPicker.cs
- ServiceOperation.cs
- PrinterSettings.cs
- _OverlappedAsyncResult.cs
- Vector3DValueSerializer.cs
- ScriptResourceInfo.cs
- CallbackHandler.cs
- TextWriterTraceListener.cs
- MetadataItemCollectionFactory.cs
- AnnotationAdorner.cs
- TypeInfo.cs
- XmlDictionaryReaderQuotasElement.cs
- ValidationErrorEventArgs.cs
- brushes.cs
- ToolZone.cs
- CodeActivityMetadata.cs
- ContainerVisual.cs
- KnownAssembliesSet.cs
- Geometry.cs
- MetabaseServerConfig.cs
- RawStylusInputCustomDataList.cs
- XmlAttribute.cs