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
- MultiDataTrigger.cs
- DefaultBinder.cs
- FileIOPermission.cs
- DynamicRendererThreadManager.cs
- Activity.cs
- FontStyle.cs
- EntityClassGenerator.cs
- CommonProperties.cs
- SR.Designer.cs
- ScriptControlManager.cs
- ColorContext.cs
- CommandManager.cs
- RepeatButton.cs
- StackSpiller.Bindings.cs
- RelationHandler.cs
- ConfigurationElementProperty.cs
- DataTableTypeConverter.cs
- FontSource.cs
- UnicastIPAddressInformationCollection.cs
- PropertyGeneratedEventArgs.cs
- TextRangeEditLists.cs
- UpdatePanel.cs
- SessionStateUtil.cs
- XmlSchemaAnyAttribute.cs
- CrossSiteScriptingValidation.cs
- SmtpMail.cs
- SchemaTypeEmitter.cs
- LogReservationCollection.cs
- XmlDictionary.cs
- HtmlTableRow.cs
- DesignerSerializationOptionsAttribute.cs
- GeneralTransformGroup.cs
- UnsafeNativeMethods.cs
- EditingScope.cs
- MSHTMLHost.cs
- SimpleBitVector32.cs
- FormattedTextSymbols.cs
- XmlILIndex.cs
- PageSetupDialog.cs
- ProcessInfo.cs
- X509ChainPolicy.cs
- ProfilePropertySettingsCollection.cs
- TemplateBindingExpression.cs
- WebReference.cs
- XmlWellformedWriterHelpers.cs
- ObjectRef.cs
- BindingGraph.cs
- ContainerActivationHelper.cs
- SegmentInfo.cs
- PointLightBase.cs
- SoapFault.cs
- StrongNameIdentityPermission.cs
- SerializationAttributes.cs
- SafeSecurityHandles.cs
- Stopwatch.cs
- Assert.cs
- Encoder.cs
- DefaultParameterValueAttribute.cs
- TransformValueSerializer.cs
- OperationParameterInfoCollection.cs
- ContextMenuService.cs
- RoleBoolean.cs
- DataList.cs
- CultureInfoConverter.cs
- RepeaterCommandEventArgs.cs
- ServiceDescriptionImporter.cs
- ParameterCollection.cs
- DataServiceQueryOfT.cs
- TabControlDesigner.cs
- Input.cs
- WorkflowQueuingService.cs
- QueryInterceptorAttribute.cs
- ErrorActivity.cs
- PrintSystemException.cs
- GlobalizationSection.cs
- StyleModeStack.cs
- ItemDragEvent.cs
- WebPartDescription.cs
- GridEntryCollection.cs
- PairComparer.cs
- AnnotationComponentChooser.cs
- CustomErrorsSection.cs
- AVElementHelper.cs
- log.cs
- ChannelEndpointElementCollection.cs
- MemoryMappedFile.cs
- XmlIterators.cs
- ServicePoint.cs
- __FastResourceComparer.cs
- CDSCollectionETWBCLProvider.cs
- SqlTypeConverter.cs
- DataSetMappper.cs
- Update.cs
- EntityDataSourceWrapper.cs
- ApplicationSettingsBase.cs
- WebPartUserCapability.cs
- RecipientInfo.cs
- NativeObjectSecurity.cs
- ResXResourceWriter.cs
- ControlBuilder.cs