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
- MessageEncodingBindingElement.cs
- CellTreeNode.cs
- EntityClientCacheKey.cs
- HyperlinkAutomationPeer.cs
- ColorConvertedBitmap.cs
- AppSecurityManager.cs
- BridgeDataReader.cs
- ThreadAbortException.cs
- UpdateException.cs
- WebPartPersonalization.cs
- Internal.cs
- X509Extension.cs
- Perspective.cs
- TextEditorCopyPaste.cs
- XmlLoader.cs
- BeginEvent.cs
- PtsPage.cs
- BasicViewGenerator.cs
- ChangePassword.cs
- TreeViewTemplateSelector.cs
- ThemeInfoAttribute.cs
- TrustManager.cs
- AttributeExtensions.cs
- Int16Converter.cs
- ValueProviderWrapper.cs
- Solver.cs
- ClientSponsor.cs
- DataColumnMappingCollection.cs
- ElementInit.cs
- COM2IPerPropertyBrowsingHandler.cs
- AutoResetEvent.cs
- WhitespaceRule.cs
- XamlReaderHelper.cs
- CommandID.cs
- XmlWriterTraceListener.cs
- SqlWorkflowInstanceStoreLock.cs
- ActivityFunc.cs
- ArraySortHelper.cs
- MultiAsyncResult.cs
- SemanticBasicElement.cs
- StylusPointPropertyInfo.cs
- RouteUrlExpressionBuilder.cs
- SimpleBitVector32.cs
- StrokeDescriptor.cs
- EncoderFallback.cs
- SessionEndedEventArgs.cs
- HttpCacheParams.cs
- NativeMethodsOther.cs
- CommonObjectSecurity.cs
- DetailsViewPagerRow.cs
- DelayLoadType.cs
- TypeValidationEventArgs.cs
- XmlTypeAttribute.cs
- KeyGesture.cs
- PointLightBase.cs
- XamlWrappingReader.cs
- TraceLog.cs
- NavigationFailedEventArgs.cs
- ActivityMetadata.cs
- StreamWriter.cs
- SessionStateItemCollection.cs
- Color.cs
- ConfigurationManagerHelper.cs
- TextClipboardData.cs
- EntryPointNotFoundException.cs
- CodeTryCatchFinallyStatement.cs
- SqlTypeSystemProvider.cs
- SchemaNamespaceManager.cs
- FullTrustAssemblyCollection.cs
- Configuration.cs
- IntegrationExceptionEventArgs.cs
- CLRBindingWorker.cs
- OleDbConnectionFactory.cs
- TreeViewImageIndexConverter.cs
- CaseStatement.cs
- InteropBitmapSource.cs
- RefType.cs
- Separator.cs
- ProjectionPruner.cs
- KeyInfo.cs
- DataGridViewCellMouseEventArgs.cs
- PreProcessor.cs
- OlePropertyStructs.cs
- DataServiceRequest.cs
- ExternalFile.cs
- FileNotFoundException.cs
- HttpHandlersSection.cs
- KeyPullup.cs
- PolicyChain.cs
- AnnotationResourceChangedEventArgs.cs
- GC.cs
- LineUtil.cs
- Italic.cs
- DataObjectAttribute.cs
- FileEnumerator.cs
- HttpProfileBase.cs
- TextTreePropertyUndoUnit.cs
- DataGridViewCellMouseEventArgs.cs
- _AutoWebProxyScriptEngine.cs
- RelatedPropertyManager.cs