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
- MessageQueueKey.cs
- StreamProxy.cs
- CompareInfo.cs
- Pen.cs
- SafeEventHandle.cs
- TreeNodeCollection.cs
- RelationshipNavigation.cs
- SrgsGrammar.cs
- DtrList.cs
- SessionState.cs
- AmbientProperties.cs
- CaseStatementProjectedSlot.cs
- HttpException.cs
- ResourceDictionaryCollection.cs
- RNGCryptoServiceProvider.cs
- FilterException.cs
- FixedPageAutomationPeer.cs
- CallbackValidatorAttribute.cs
- HttpCapabilitiesEvaluator.cs
- MimeObjectFactory.cs
- StatusBarItemAutomationPeer.cs
- Figure.cs
- SaveRecipientRequest.cs
- FileLogRecordStream.cs
- XsdDataContractExporter.cs
- _RequestCacheProtocol.cs
- _StreamFramer.cs
- Listbox.cs
- EdmFunction.cs
- SecondaryViewProvider.cs
- InstanceContext.cs
- ShaperBuffers.cs
- GuidConverter.cs
- FrameworkReadOnlyPropertyMetadata.cs
- DBPropSet.cs
- ThumbAutomationPeer.cs
- OdbcParameterCollection.cs
- ExclusiveHandleList.cs
- xmlformatgeneratorstatics.cs
- ImageAttributes.cs
- StatusBarAutomationPeer.cs
- SimpleType.cs
- SettingsContext.cs
- InterleavedZipPartStream.cs
- TypeToTreeConverter.cs
- OwnerDrawPropertyBag.cs
- MarkupCompilePass1.cs
- AsymmetricKeyExchangeDeformatter.cs
- GeometryGroup.cs
- GlyphsSerializer.cs
- Stroke.cs
- CompilerError.cs
- ResizeGrip.cs
- Track.cs
- CanonicalFormWriter.cs
- XamlPathDataSerializer.cs
- PropertyPath.cs
- HexParser.cs
- OutOfMemoryException.cs
- SchemaElementDecl.cs
- AttachedAnnotation.cs
- XmlElementAttribute.cs
- TextTrailingWordEllipsis.cs
- MgmtConfigurationRecord.cs
- MailHeaderInfo.cs
- ItemDragEvent.cs
- SoapWriter.cs
- WindowsFormsSectionHandler.cs
- ToolStripCollectionEditor.cs
- mactripleDES.cs
- FixedSOMPage.cs
- Listbox.cs
- ConsoleEntryPoint.cs
- SystemNetworkInterface.cs
- HierarchicalDataBoundControl.cs
- StaticExtensionConverter.cs
- DataKey.cs
- AlternationConverter.cs
- SystemInfo.cs
- ActivityInstanceMap.cs
- XPSSignatureDefinition.cs
- FrameworkElementAutomationPeer.cs
- BitmapFrameEncode.cs
- ParameterReplacerVisitor.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- RangeExpression.cs
- PerformanceCounterPermissionEntryCollection.cs
- ResolveMatchesMessageCD1.cs
- FixedTextPointer.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- ZoneLinkButton.cs
- TypedElement.cs
- ListView.cs
- PrimitiveXmlSerializers.cs
- ListControl.cs
- ConditionalBranch.cs
- MenuItemCollection.cs
- DataContext.cs
- HopperCache.cs
- TaskForm.cs