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
- GradientStop.cs
- ObjectDataSourceStatusEventArgs.cs
- CodeThrowExceptionStatement.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- PolicyManager.cs
- ListBoxChrome.cs
- SerialErrors.cs
- OdbcException.cs
- AssertUtility.cs
- XmlAttributeAttribute.cs
- DeclarationUpdate.cs
- AuthenticationService.cs
- Point3DAnimation.cs
- CodePageUtils.cs
- RegionInfo.cs
- RegexCharClass.cs
- FreezableCollection.cs
- PropertyDescriptorCollection.cs
- KerberosRequestorSecurityToken.cs
- XmlSchemaAny.cs
- NegotiationTokenAuthenticatorStateCache.cs
- ConfigurationSectionGroupCollection.cs
- NativeMethods.cs
- CFStream.cs
- XmlSchemaChoice.cs
- filewebrequest.cs
- SqlDataSourceFilteringEventArgs.cs
- DynamicMethod.cs
- ToolStripComboBox.cs
- BatchStream.cs
- RtfToken.cs
- FactoryMaker.cs
- ProcessModelInfo.cs
- InstanceDescriptor.cs
- ResourceIDHelper.cs
- DataContractSet.cs
- ThicknessAnimationBase.cs
- EnumBuilder.cs
- WorkflowInstanceRecord.cs
- CommandEventArgs.cs
- SamlAdvice.cs
- RichTextBoxConstants.cs
- EntityTemplateUserControl.cs
- RadioButtonFlatAdapter.cs
- DBPropSet.cs
- RowUpdatingEventArgs.cs
- MarshalByRefObject.cs
- CatalogZoneBase.cs
- TagMapCollection.cs
- sitestring.cs
- EntityContainerAssociationSetEnd.cs
- ExpandedProjectionNode.cs
- Completion.cs
- AsmxEndpointPickerExtension.cs
- MenuItemStyle.cs
- InheritanceAttribute.cs
- SyndicationDeserializer.cs
- DefaultSettingsSection.cs
- ServiceNameCollection.cs
- ComponentSerializationService.cs
- WebConvert.cs
- XPathDocumentBuilder.cs
- XmlQueryStaticData.cs
- HttpHandlerAction.cs
- HitTestFilterBehavior.cs
- TypeEnumerableViewSchema.cs
- ExpressionEditorAttribute.cs
- ToolStripButton.cs
- ProtectedConfigurationSection.cs
- EventDriven.cs
- SessionState.cs
- Soap.cs
- ActivityTrace.cs
- EntityDataSourceContextDisposingEventArgs.cs
- TreeNode.cs
- ProcessModuleCollection.cs
- ProxyGenerator.cs
- DataGridViewHeaderCell.cs
- Attribute.cs
- SystemIPv6InterfaceProperties.cs
- Partitioner.cs
- MessageQueueConverter.cs
- FunctionCommandText.cs
- BlobPersonalizationState.cs
- UIEndRequest.cs
- Helpers.cs
- Function.cs
- SqlProfileProvider.cs
- ExpressionNode.cs
- ContainerAction.cs
- FactoryMaker.cs
- XamlStream.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- infer.cs
- AmbientEnvironment.cs
- ViewgenContext.cs
- FileDataSourceCache.cs
- BitmapEffectInput.cs
- NameTable.cs
- BindToObject.cs