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
- CompositeClientFormatter.cs
- BinaryMethodMessage.cs
- LongValidator.cs
- ContainerControlDesigner.cs
- RegexCharClass.cs
- FormsAuthenticationModule.cs
- DataTemplate.cs
- CacheRequest.cs
- MergeLocalizationDirectives.cs
- UserControlCodeDomTreeGenerator.cs
- XmlTextReaderImplHelpers.cs
- XmlWellformedWriterHelpers.cs
- UnsafeNativeMethods.cs
- PageBuildProvider.cs
- ManagementEventArgs.cs
- HitTestParameters3D.cs
- WebMessageFormatHelper.cs
- DataBoundControlHelper.cs
- DataGridViewComboBoxEditingControl.cs
- XPathParser.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- ThreadStaticAttribute.cs
- SectionVisual.cs
- Int32RectValueSerializer.cs
- DesignerCapabilities.cs
- ComplexLine.cs
- Transaction.cs
- GZipStream.cs
- PointLightBase.cs
- RegisteredDisposeScript.cs
- WebBrowserDesigner.cs
- Vector3DAnimationBase.cs
- ExceptionTrace.cs
- BamlVersionHeader.cs
- LabelDesigner.cs
- LayoutTable.cs
- CompileLiteralTextParser.cs
- AttributeCollection.cs
- ConfigurationSectionCollection.cs
- GeometryCollection.cs
- LinkTarget.cs
- UnrecognizedAssertionsBindingElement.cs
- DateTime.cs
- Compiler.cs
- ExpressionLexer.cs
- DataColumnCollection.cs
- AssemblyResourceLoader.cs
- TcpChannelHelper.cs
- ExpressionParser.cs
- ApplicationDirectoryMembershipCondition.cs
- ClientConfigurationHost.cs
- DataControlImageButton.cs
- RadialGradientBrush.cs
- InputManager.cs
- SmiEventSink.cs
- DataGridViewCellConverter.cs
- UntypedNullExpression.cs
- WindowsSpinner.cs
- DropTarget.cs
- StylusPlugInCollection.cs
- CapabilitiesAssignment.cs
- RedistVersionInfo.cs
- XamlSerializerUtil.cs
- MethodBuilder.cs
- DbProviderConfigurationHandler.cs
- ProfileService.cs
- PointLight.cs
- DbException.cs
- QilFactory.cs
- baseaxisquery.cs
- DependencyPropertyHelper.cs
- ManipulationStartingEventArgs.cs
- AnalyzedTree.cs
- DataGridSortingEventArgs.cs
- TextPointer.cs
- ImpersonationContext.cs
- QuestionEventArgs.cs
- WindowsListViewGroupHelper.cs
- RowCache.cs
- XmlSiteMapProvider.cs
- RuleElement.cs
- Decimal.cs
- XmlDataImplementation.cs
- SiteMapPathDesigner.cs
- DataGridItemAutomationPeer.cs
- OleDbConnectionInternal.cs
- GeneralTransformGroup.cs
- QilGeneratorEnv.cs
- BitmapCodecInfo.cs
- MachinePropertyVariants.cs
- OutputWindow.cs
- GeometryGroup.cs
- Script.cs
- ItemDragEvent.cs
- GlobalizationAssembly.cs
- TextReader.cs
- _FtpDataStream.cs
- ConstructorExpr.cs
- ToolboxItemFilterAttribute.cs
- AuthenticationModuleElement.cs