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
- HttpRequest.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ProcessThread.cs
- AuthenticateEventArgs.cs
- SessionStateItemCollection.cs
- Debug.cs
- CurrentTimeZone.cs
- ExceptionUtility.cs
- ImageList.cs
- EntityDataSourceState.cs
- CodeMemberProperty.cs
- IBuiltInEvidence.cs
- LongValidator.cs
- DataGridTableCollection.cs
- ConnectionPointGlyph.cs
- DefaultValueConverter.cs
- AnimationClockResource.cs
- EditorPartCollection.cs
- COM2FontConverter.cs
- Funcletizer.cs
- SelectionRangeConverter.cs
- CompiledIdentityConstraint.cs
- SignatureToken.cs
- CDSsyncETWBCLProvider.cs
- WinCategoryAttribute.cs
- Dictionary.cs
- Parameter.cs
- RenderTargetBitmap.cs
- DataTemplateSelector.cs
- SpeakCompletedEventArgs.cs
- TextElementEditingBehaviorAttribute.cs
- SiteIdentityPermission.cs
- FastEncoderWindow.cs
- EntityProviderFactory.cs
- ObjectRef.cs
- CalendarModeChangedEventArgs.cs
- ManagedIStream.cs
- TypeDescriptorFilterService.cs
- smtppermission.cs
- SqlCommandSet.cs
- DynamicDocumentPaginator.cs
- Style.cs
- StringCollection.cs
- UshortList2.cs
- ListViewItem.cs
- SetIterators.cs
- ADConnectionHelper.cs
- WorkflowServiceHostFactory.cs
- InputScope.cs
- SmiGettersStream.cs
- PreviewPageInfo.cs
- CacheChildrenQuery.cs
- SwitchLevelAttribute.cs
- DBNull.cs
- HitTestParameters3D.cs
- AttributeSetAction.cs
- VirtualPathUtility.cs
- TextViewSelectionProcessor.cs
- DataChangedEventManager.cs
- DataGridCaption.cs
- SamlAttributeStatement.cs
- BaseInfoTable.cs
- XmlSchemaSimpleTypeList.cs
- GridLengthConverter.cs
- ActivityBuilderXamlWriter.cs
- StringToken.cs
- DataSetUtil.cs
- AuthorizationRuleCollection.cs
- XmlUtf8RawTextWriter.cs
- TriggerCollection.cs
- RequestDescription.cs
- FieldToken.cs
- ByteKeyFrameCollection.cs
- NotifyInputEventArgs.cs
- VoiceInfo.cs
- ColumnWidthChangedEvent.cs
- LocalizableResourceBuilder.cs
- AddingNewEventArgs.cs
- DropDownHolder.cs
- ObservableCollection.cs
- MatrixTransform3D.cs
- IPHostEntry.cs
- BooleanExpr.cs
- QilLiteral.cs
- NumberFormatInfo.cs
- UnhandledExceptionEventArgs.cs
- metadatamappinghashervisitor.cs
- WorkflowServiceBehavior.cs
- XmlWhitespace.cs
- ManifestResourceInfo.cs
- ForEach.cs
- DropSource.cs
- MoveSizeWinEventHandler.cs
- IntSecurity.cs
- Int64Storage.cs
- SqlException.cs
- DateTimeValueSerializer.cs
- PatternMatchRules.cs
- odbcmetadatafactory.cs
- Constraint.cs