Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Markup / TypeExtension.cs / 1 / TypeExtension.cs
/****************************************************************************\ * * File: TypeExtension.cs * * Class for Xaml markup extension for a Type reference * * Copyright (C) 2004 by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.Windows; using System.ComponentModel; namespace System.Windows.Markup { ////// Class for Xaml markup extension for a Type reference. /// [TypeConverter(typeof(TypeExtensionConverter))] [MarkupExtensionReturnType(typeof(Type))] public class TypeExtension : MarkupExtension { ////// Default Constructor /// public TypeExtension() { } ////// Constructor that takes a type name /// public TypeExtension(string typeName) { if (typeName == null) { throw new ArgumentNullException("typeName"); } _typeName = typeName; } ////// Constructor that takes a type /// public TypeExtension(Type type) { if (type == null) { throw new ArgumentNullException("type"); } _type = type; // we would like to set TypeName here, but we can't because we can't resolve its namespace } ////// Return an object that should be set on the targetObject's targetProperty /// for this markup extension. TypeExtension resolves a string into a Type /// and returns it. /// /// Object that can provide services for the markup extension. ////// The object to set on this property. /// public override object ProvideValue(IServiceProvider serviceProvider) { // If a type was supplied, no context nor type name are needed if (_type != null) { return _type; } // Validate the initialization if (_typeName == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionTypeName)); } // Get the IXamlTypeResolver from the service provider IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; if( xamlTypeResolver == null ) { throw new InvalidOperationException( SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver" )); } // Get the type _type = xamlTypeResolver.Resolve(_typeName); if (_type == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionTypeNameBad, _typeName)); } return _type; // we could cash the result of type as _type, but it might cause some problems, and in theory we shouldn't need to } ////// The typename represented by this markup extension. The name has the format /// Prefix:Typename, where Prefix is the xml namespace prefix for this type. /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string TypeName { get { return _typeName; } set { if (value == null) { throw new ArgumentNullException("value"); } _typeName = value; _type = null; // so that ProvideValue does not use the existing type } } ////// The type represented by this markup extension. /// [DefaultValue(null)] [ConstructorArgument("type")] public Type Type { get { return _type; } set { if (value == null) { throw new ArgumentNullException("value"); } _type = value; _typeName = null; // so that ProvideValue does not use the existing typeName } } private string _typeName; private Type _type; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. /****************************************************************************\ * * File: TypeExtension.cs * * Class for Xaml markup extension for a Type reference * * Copyright (C) 2004 by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.Windows; using System.ComponentModel; namespace System.Windows.Markup { ////// Class for Xaml markup extension for a Type reference. /// [TypeConverter(typeof(TypeExtensionConverter))] [MarkupExtensionReturnType(typeof(Type))] public class TypeExtension : MarkupExtension { ////// Default Constructor /// public TypeExtension() { } ////// Constructor that takes a type name /// public TypeExtension(string typeName) { if (typeName == null) { throw new ArgumentNullException("typeName"); } _typeName = typeName; } ////// Constructor that takes a type /// public TypeExtension(Type type) { if (type == null) { throw new ArgumentNullException("type"); } _type = type; // we would like to set TypeName here, but we can't because we can't resolve its namespace } ////// Return an object that should be set on the targetObject's targetProperty /// for this markup extension. TypeExtension resolves a string into a Type /// and returns it. /// /// Object that can provide services for the markup extension. ////// The object to set on this property. /// public override object ProvideValue(IServiceProvider serviceProvider) { // If a type was supplied, no context nor type name are needed if (_type != null) { return _type; } // Validate the initialization if (_typeName == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionTypeName)); } // Get the IXamlTypeResolver from the service provider IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; if( xamlTypeResolver == null ) { throw new InvalidOperationException( SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver" )); } // Get the type _type = xamlTypeResolver.Resolve(_typeName); if (_type == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionTypeNameBad, _typeName)); } return _type; // we could cash the result of type as _type, but it might cause some problems, and in theory we shouldn't need to } ////// The typename represented by this markup extension. The name has the format /// Prefix:Typename, where Prefix is the xml namespace prefix for this type. /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string TypeName { get { return _typeName; } set { if (value == null) { throw new ArgumentNullException("value"); } _typeName = value; _type = null; // so that ProvideValue does not use the existing type } } ////// The type represented by this markup extension. /// [DefaultValue(null)] [ConstructorArgument("type")] public Type Type { get { return _type; } set { if (value == null) { throw new ArgumentNullException("value"); } _type = value; _typeName = null; // so that ProvideValue does not use the existing typeName } } private string _typeName; private Type _type; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PolyLineSegment.cs
- DataKey.cs
- AtomContentProperty.cs
- NamedObject.cs
- URLAttribute.cs
- METAHEADER.cs
- DeleteHelper.cs
- ConfigurationElementCollection.cs
- TypeListConverter.cs
- QilCloneVisitor.cs
- RootProjectionNode.cs
- StylusEventArgs.cs
- RecommendedAsConfigurableAttribute.cs
- UrlPath.cs
- ContainsRowNumberChecker.cs
- WpfXamlMember.cs
- MailSettingsSection.cs
- EntityContainer.cs
- CompModSwitches.cs
- PermissionSetEnumerator.cs
- BoundingRectTracker.cs
- ProjectionPlanCompiler.cs
- BaseDataList.cs
- GenerateHelper.cs
- HttpInputStream.cs
- ToolBarButton.cs
- DateTimeOffset.cs
- ResXDataNode.cs
- SimplePropertyEntry.cs
- RootContext.cs
- _AcceptOverlappedAsyncResult.cs
- MultiDataTrigger.cs
- CollectionDataContractAttribute.cs
- ListBox.cs
- ReaderContextStackData.cs
- Rect.cs
- ComponentChangingEvent.cs
- TemplateComponentConnector.cs
- IApplicationTrustManager.cs
- XsltLoader.cs
- Line.cs
- AddInContractAttribute.cs
- COM2ExtendedUITypeEditor.cs
- MetaForeignKeyColumn.cs
- ChangeNode.cs
- RTTrackingProfile.cs
- ManagementQuery.cs
- AttachedPropertyMethodSelector.cs
- SafeRightsManagementHandle.cs
- DrawingGroupDrawingContext.cs
- BaseTreeIterator.cs
- ResourceCodeDomSerializer.cs
- AppendHelper.cs
- ProtocolsConfigurationHandler.cs
- Helper.cs
- TraceFilter.cs
- CheckBox.cs
- SoapHeader.cs
- MembershipUser.cs
- ToolboxSnapDragDropEventArgs.cs
- CachingHintValidation.cs
- CollectionViewProxy.cs
- SemanticValue.cs
- TextEffect.cs
- MultipleViewProviderWrapper.cs
- BitmapEffectrendercontext.cs
- DataErrorValidationRule.cs
- ProvidePropertyAttribute.cs
- XamlContextStack.cs
- InvalidFilterCriteriaException.cs
- ReaderWriterLock.cs
- CellParaClient.cs
- FilterElement.cs
- StylusPointProperties.cs
- ObjectQueryProvider.cs
- Shape.cs
- ButtonBaseAdapter.cs
- securitycriticaldata.cs
- HitTestDrawingContextWalker.cs
- FieldDescriptor.cs
- TaiwanLunisolarCalendar.cs
- AutomationPatternInfo.cs
- DesignTable.cs
- SevenBitStream.cs
- DetailsView.cs
- CalloutQueueItem.cs
- Splitter.cs
- BindingSource.cs
- HtmlButton.cs
- IndexedGlyphRun.cs
- FacetChecker.cs
- DispatcherTimer.cs
- StorageComplexTypeMapping.cs
- GlyphRunDrawing.cs
- ConcurrentDictionary.cs
- ValueExpressions.cs
- Literal.cs
- MappedMetaModel.cs
- SettingsAttributeDictionary.cs
- SpecialFolderEnumConverter.cs