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
- AppliedDeviceFiltersDialog.cs
- SqlParameter.cs
- NameObjectCollectionBase.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- PrintingPermissionAttribute.cs
- ipaddressinformationcollection.cs
- SettingsContext.cs
- Pool.cs
- SID.cs
- TCEAdapterGenerator.cs
- ViewManager.cs
- RelationshipType.cs
- TimelineGroup.cs
- CollectionContainer.cs
- IFormattable.cs
- WebBrowser.cs
- AuthorizationSection.cs
- CodeTypeReference.cs
- CachedPathData.cs
- XmlUtil.cs
- MetadataException.cs
- PackWebResponse.cs
- ToolTip.cs
- SecurityResources.cs
- DataGridRelationshipRow.cs
- AxisAngleRotation3D.cs
- ValidationHelper.cs
- BoundField.cs
- SamlAdvice.cs
- SevenBitStream.cs
- QueryPageSettingsEventArgs.cs
- MobileControlPersister.cs
- BinaryObjectReader.cs
- GuidelineCollection.cs
- LinqDataSourceDisposeEventArgs.cs
- WindowVisualStateTracker.cs
- SqlColumnizer.cs
- ListViewDeleteEventArgs.cs
- ProfileEventArgs.cs
- PingOptions.cs
- XmlSchemaProviderAttribute.cs
- Int32RectValueSerializer.cs
- CardSpaceSelector.cs
- errorpatternmatcher.cs
- VisualTreeUtils.cs
- MultiDataTrigger.cs
- LostFocusEventManager.cs
- ImageDrawing.cs
- InkPresenter.cs
- SqlDataSourceStatusEventArgs.cs
- PopupRoot.cs
- DbQueryCommandTree.cs
- ScrollEventArgs.cs
- EmptyEnumerator.cs
- CompositeScriptReferenceEventArgs.cs
- FuncCompletionCallbackWrapper.cs
- ApplicationBuildProvider.cs
- HashCodeCombiner.cs
- BitmapCodecInfoInternal.cs
- SafeMILHandle.cs
- SqlNodeAnnotation.cs
- HMACMD5.cs
- TrustManager.cs
- DescendantQuery.cs
- GorillaCodec.cs
- XPathBinder.cs
- SettingsAttributeDictionary.cs
- Pkcs7Recipient.cs
- RectAnimation.cs
- ListView.cs
- Selector.cs
- DictionaryEntry.cs
- ObjectDataSourceMethodEventArgs.cs
- WebPartEventArgs.cs
- Line.cs
- SemanticResolver.cs
- ComponentDispatcherThread.cs
- InitializerFacet.cs
- SqlException.cs
- Util.cs
- ChtmlTextBoxAdapter.cs
- TemplateManager.cs
- _NegoStream.cs
- IconConverter.cs
- DataContractAttribute.cs
- TreeNodeMouseHoverEvent.cs
- SiteMapProvider.cs
- TaiwanLunisolarCalendar.cs
- SqlDataAdapter.cs
- TableItemPattern.cs
- MessageAction.cs
- HttpProfileBase.cs
- InkCanvasFeedbackAdorner.cs
- ListViewDeleteEventArgs.cs
- ExpressionBuilderContext.cs
- EntityConnectionStringBuilderItem.cs
- Stacktrace.cs
- AdjustableArrowCap.cs
- OracleFactory.cs
- CompositeCollectionView.cs