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
- CubicEase.cs
- StringValidator.cs
- ContainerControl.cs
- ArraySegment.cs
- TypedElement.cs
- DataObjectAttribute.cs
- XpsPackagingPolicy.cs
- IndependentAnimationStorage.cs
- SamlAuthenticationClaimResource.cs
- RepeaterDataBoundAdapter.cs
- InvalidAsynchronousStateException.cs
- CompositeActivityDesigner.cs
- ParserExtension.cs
- ViewManagerAttribute.cs
- ScriptControl.cs
- _ConnectOverlappedAsyncResult.cs
- ConfigErrorGlyph.cs
- KeyInstance.cs
- ObjectStateEntry.cs
- SqlLiftIndependentRowExpressions.cs
- NotConverter.cs
- EditorAttribute.cs
- UnsafeNativeMethods.cs
- UnmanagedHandle.cs
- NamespaceDecl.cs
- AppSettingsReader.cs
- SR.cs
- ClusterSafeNativeMethods.cs
- ProcessInputEventArgs.cs
- SoapProtocolImporter.cs
- ImmutableObjectAttribute.cs
- RoutedEventArgs.cs
- CheckPair.cs
- TypeResolvingOptions.cs
- EventManager.cs
- DrawItemEvent.cs
- ReferenceService.cs
- parserscommon.cs
- Utils.cs
- SettingsProviderCollection.cs
- SwitchLevelAttribute.cs
- XmlSchemaObjectTable.cs
- RootNamespaceAttribute.cs
- regiisutil.cs
- BindingMemberInfo.cs
- DetailsViewModeEventArgs.cs
- GridViewUpdateEventArgs.cs
- CodeCompileUnit.cs
- Unit.cs
- RuleSettingsCollection.cs
- ScalarConstant.cs
- PeerInputChannelListener.cs
- TemplateControlBuildProvider.cs
- CurrentChangingEventManager.cs
- CryptoApi.cs
- AggregatePushdown.cs
- ValueProviderWrapper.cs
- PerformanceCountersElement.cs
- NonParentingControl.cs
- BamlLocalizableResource.cs
- Decimal.cs
- Quad.cs
- PagedDataSource.cs
- PageContentCollection.cs
- QueryResponse.cs
- SevenBitStream.cs
- Merger.cs
- SplitterEvent.cs
- ManipulationDevice.cs
- ControlTemplate.cs
- StringResourceManager.cs
- ScriptingWebServicesSectionGroup.cs
- CustomLineCap.cs
- WebPartConnectionsDisconnectVerb.cs
- Translator.cs
- GenericTypeParameterBuilder.cs
- SocketElement.cs
- ToolStripOverflow.cs
- WindowsPrincipal.cs
- CodeCommentStatement.cs
- StateBag.cs
- DtdParser.cs
- RbTree.cs
- SortDescription.cs
- SharedRuntimeState.cs
- MarshalDirectiveException.cs
- Polyline.cs
- NodeLabelEditEvent.cs
- CodeVariableReferenceExpression.cs
- XmlToDatasetMap.cs
- OverrideMode.cs
- AsymmetricSignatureDeformatter.cs
- NameNode.cs
- Attributes.cs
- RelationshipEndMember.cs
- ReliabilityContractAttribute.cs
- RepeaterCommandEventArgs.cs
- ActiveXHelper.cs
- QueryConverter.cs
- XmlWriter.cs