Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- XPathDescendantIterator.cs
- ResourceWriter.cs
- WebPartCollection.cs
- PipelineDeploymentState.cs
- ParameterBuilder.cs
- xmlsaver.cs
- Label.cs
- DrawingGroupDrawingContext.cs
- DesignTimeParseData.cs
- QilXmlReader.cs
- ContextMenuService.cs
- UserNameSecurityToken.cs
- _WinHttpWebProxyDataBuilder.cs
- PropertyChangingEventArgs.cs
- TextChange.cs
- ContractsBCL.cs
- IResourceProvider.cs
- CommandDesigner.cs
- TextRangeSerialization.cs
- SchemaName.cs
- ServiceModelExtensionCollectionElement.cs
- CallTemplateAction.cs
- TakeOrSkipQueryOperator.cs
- Part.cs
- GlyphRunDrawing.cs
- FormViewUpdateEventArgs.cs
- AttachInfo.cs
- ProjectionPathSegment.cs
- OdbcFactory.cs
- ThousandthOfEmRealDoubles.cs
- TraceUtils.cs
- TextContainerChangeEventArgs.cs
- Wildcard.cs
- MessageDecoder.cs
- storepermissionattribute.cs
- XmlChildNodes.cs
- Label.cs
- NullRuntimeConfig.cs
- SettingsSavedEventArgs.cs
- WebBrowserHelper.cs
- BinaryObjectWriter.cs
- HttpServerUtilityWrapper.cs
- DesignerLoader.cs
- SqlMethodAttribute.cs
- CacheAxisQuery.cs
- SafeNativeMethods.cs
- ChangePassword.cs
- CapacityStreamGeometryContext.cs
- PathGeometry.cs
- BlobPersonalizationState.cs
- MobileComponentEditorPage.cs
- ComponentDispatcherThread.cs
- PassportPrincipal.cs
- RightsManagementEncryptedStream.cs
- SqlVersion.cs
- BooleanStorage.cs
- PersonalizationProviderHelper.cs
- BitmapEffectGroup.cs
- assemblycache.cs
- DetailsViewCommandEventArgs.cs
- CodeCastExpression.cs
- DebuggerAttributes.cs
- TraceUtils.cs
- DesignerMetadata.cs
- DocumentViewerAutomationPeer.cs
- RootBrowserWindowAutomationPeer.cs
- EventArgs.cs
- ConcurrentBag.cs
- HostUtils.cs
- ComEventsInfo.cs
- RequiredFieldValidator.cs
- MergeLocalizationDirectives.cs
- SiteOfOriginContainer.cs
- InvalidProgramException.cs
- FieldAccessException.cs
- IdentifierService.cs
- WebPartTransformerCollection.cs
- FileUpload.cs
- ActiveXHelper.cs
- SqlRowUpdatedEvent.cs
- Rss20ItemFormatter.cs
- RetrieveVirtualItemEventArgs.cs
- PolygonHotSpot.cs
- PolicyLevel.cs
- ContextMenuStripGroup.cs
- Brush.cs
- KeyValuePair.cs
- HtmlTitle.cs
- smtppermission.cs
- Keywords.cs
- GridEntryCollection.cs
- DataAdapter.cs
- RoleManagerEventArgs.cs
- DbException.cs
- MbpInfo.cs
- TargetConverter.cs
- PathGradientBrush.cs
- TextTrailingCharacterEllipsis.cs
- BamlResourceContent.cs
- DataTransferEventArgs.cs