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
- SqlLiftIndependentRowExpressions.cs
- JapaneseLunisolarCalendar.cs
- CodeTypeMemberCollection.cs
- HttpContextServiceHost.cs
- DirectoryInfo.cs
- ComponentChangedEvent.cs
- PageContentAsyncResult.cs
- SystemThemeKey.cs
- SByteConverter.cs
- CacheRequest.cs
- TimelineGroup.cs
- TreeWalker.cs
- ActionItem.cs
- CopyNamespacesAction.cs
- SchemaLookupTable.cs
- ObjectPersistData.cs
- propertyentry.cs
- InputReport.cs
- Activity.cs
- TextServicesManager.cs
- PageParser.cs
- RelationshipManager.cs
- ISessionStateStore.cs
- AddInSegmentDirectoryNotFoundException.cs
- JoinGraph.cs
- MethodBody.cs
- ExecutionEngineException.cs
- XmlEnumAttribute.cs
- counter.cs
- QilPatternFactory.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- PrivilegedConfigurationManager.cs
- EditModeSwitchButton.cs
- ByteRangeDownloader.cs
- XmlSerializerSection.cs
- PartitionerQueryOperator.cs
- DataListItemEventArgs.cs
- Message.cs
- BinaryWriter.cs
- DataRelationCollection.cs
- ExpressionBindings.cs
- BooleanSwitch.cs
- MembershipUser.cs
- Predicate.cs
- UnsafeNativeMethods.cs
- MouseActionValueSerializer.cs
- TraceSection.cs
- DataGridCommandEventArgs.cs
- ReadOnlyKeyedCollection.cs
- NotificationContext.cs
- MailMessage.cs
- TextWriter.cs
- WorkflowTerminatedException.cs
- LocalValueEnumerator.cs
- SqlCacheDependencySection.cs
- MediaElementAutomationPeer.cs
- Pair.cs
- ObjectPropertyMapping.cs
- RemoteArgument.cs
- LocalFileSettingsProvider.cs
- RelationshipDetailsRow.cs
- SystemNetHelpers.cs
- XpsSerializationException.cs
- TraceHandler.cs
- XmlCharType.cs
- SortableBindingList.cs
- MemoryPressure.cs
- SAPICategories.cs
- ThrowOnMultipleAssignment.cs
- HttpsHostedTransportConfiguration.cs
- future.cs
- InputGestureCollection.cs
- XPathBinder.cs
- ToolboxItemWrapper.cs
- ElementAtQueryOperator.cs
- InstanceLockedException.cs
- SizeConverter.cs
- CompilerGlobalScopeAttribute.cs
- IconConverter.cs
- NumberFormatter.cs
- AuthorizationRuleCollection.cs
- PhoneCall.cs
- HMACSHA384.cs
- Variable.cs
- Expression.cs
- EntityDataSourceViewSchema.cs
- EntityAdapter.cs
- ListViewCommandEventArgs.cs
- AmbientLight.cs
- PowerStatus.cs
- DrawingGroup.cs
- SslStream.cs
- NodeFunctions.cs
- OwnerDrawPropertyBag.cs
- SolidBrush.cs
- SpeakCompletedEventArgs.cs
- MetadataPropertyCollection.cs
- ComplexType.cs
- ByteStreamGeometryContext.cs
- FontEmbeddingManager.cs