Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- XslException.cs
- TraceContextEventArgs.cs
- XmlCharCheckingReader.cs
- WebHttpBinding.cs
- PolicyStatement.cs
- InternalUserCancelledException.cs
- ExtendedTransformFactory.cs
- SettingsContext.cs
- ProviderCommandInfoUtils.cs
- QilExpression.cs
- DataGridViewImageCell.cs
- SynchronizationValidator.cs
- CodeAccessSecurityEngine.cs
- IOException.cs
- EnumUnknown.cs
- ListViewTableCell.cs
- Queue.cs
- TextCompositionManager.cs
- TextDecorationCollectionConverter.cs
- MarkedHighlightComponent.cs
- TextTreeText.cs
- HandledMouseEvent.cs
- AddInServer.cs
- PropertyConverter.cs
- ExtensionFile.cs
- RsaKeyIdentifierClause.cs
- CodeIdentifiers.cs
- ReadOnlyCollection.cs
- ExitEventArgs.cs
- TextEditorCharacters.cs
- XPathBinder.cs
- DataViewSettingCollection.cs
- TableLayoutStyleCollection.cs
- PagesSection.cs
- FixedSOMFixedBlock.cs
- UnsafeNativeMethods.cs
- CanonicalFontFamilyReference.cs
- WorkItem.cs
- XMLDiffLoader.cs
- VectorCollectionConverter.cs
- NumberSubstitution.cs
- Operators.cs
- NavigatingCancelEventArgs.cs
- DynamicDataRouteHandler.cs
- PropertyDescriptorComparer.cs
- ExtendedProperty.cs
- CustomError.cs
- DummyDataSource.cs
- EventNotify.cs
- ModuleBuilder.cs
- WebConvert.cs
- BoolExpressionVisitors.cs
- CodeMemberField.cs
- ArrayWithOffset.cs
- Point3DCollectionConverter.cs
- CatchBlock.cs
- XpsFixedDocumentReaderWriter.cs
- LicenseContext.cs
- ProfilePropertySettingsCollection.cs
- ReliabilityContractAttribute.cs
- PermissionListSet.cs
- XamlVector3DCollectionSerializer.cs
- COM2EnumConverter.cs
- SQLChars.cs
- XmlQueryStaticData.cs
- PersistencePipeline.cs
- ResourceAssociationSetEnd.cs
- HttpProfileBase.cs
- ResolvedKeyFrameEntry.cs
- ProviderCollection.cs
- Privilege.cs
- InteropTrackingRecord.cs
- DataPagerField.cs
- BeginStoryboard.cs
- ReliableInputConnection.cs
- NavigationHelper.cs
- TextPenaltyModule.cs
- Native.cs
- Attributes.cs
- _CommandStream.cs
- ChildrenQuery.cs
- SqlCacheDependency.cs
- columnmapkeybuilder.cs
- StaticDataManager.cs
- SyndicationDeserializer.cs
- SettingsPropertyIsReadOnlyException.cs
- ActionFrame.cs
- PrefixQName.cs
- ValueTable.cs
- ShadowGlyph.cs
- ModelItemExtensions.cs
- CryptoKeySecurity.cs
- Point3DCollection.cs
- _Rfc2616CacheValidators.cs
- BaseWebProxyFinder.cs
- DataGridViewTopRowAccessibleObject.cs
- DbConnectionOptions.cs
- IsolatedStorageSecurityState.cs
- ReadOnlyHierarchicalDataSourceView.cs
- InvalidOleVariantTypeException.cs