Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ImageListUtils.cs
- QilReplaceVisitor.cs
- XsltLoader.cs
- ToolStripButton.cs
- CqlBlock.cs
- PeerFlooder.cs
- ListMarkerSourceInfo.cs
- AppearanceEditorPart.cs
- ParserContext.cs
- PermissionToken.cs
- UpdateTranslator.cs
- SoapSchemaMember.cs
- SqlUtil.cs
- BatchWriter.cs
- UpdatePanelControlTrigger.cs
- SQLSingle.cs
- HuffModule.cs
- KernelTypeValidation.cs
- WorkflowDesignerMessageFilter.cs
- ProgressChangedEventArgs.cs
- MenuRendererClassic.cs
- ProfilePropertySettingsCollection.cs
- PerspectiveCamera.cs
- ProfilePropertySettings.cs
- TextProperties.cs
- RegisteredArrayDeclaration.cs
- DataGridViewElement.cs
- TileBrush.cs
- InArgument.cs
- DataServiceHost.cs
- Stackframe.cs
- SystemWebSectionGroup.cs
- WorkflowInstanceContextProvider.cs
- StandardTransformFactory.cs
- UnitySerializationHolder.cs
- ItemMap.cs
- oledbmetadatacollectionnames.cs
- Section.cs
- ClientTarget.cs
- XNodeValidator.cs
- FormatSelectingMessageInspector.cs
- basevalidator.cs
- StackSpiller.Bindings.cs
- DSASignatureFormatter.cs
- WebGetAttribute.cs
- UnicastIPAddressInformationCollection.cs
- Cloud.cs
- WindowsNonControl.cs
- Camera.cs
- ToolBar.cs
- Renderer.cs
- PolicyManager.cs
- LongMinMaxAggregationOperator.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- InputEventArgs.cs
- SelectionRange.cs
- XPathConvert.cs
- SecurityDescriptor.cs
- BindingManagerDataErrorEventArgs.cs
- OletxVolatileEnlistment.cs
- XmlMtomReader.cs
- ComponentEditorPage.cs
- WindowsAuthenticationEventArgs.cs
- ConfigXmlAttribute.cs
- CodeSubDirectoriesCollection.cs
- WriteableBitmap.cs
- WpfWebRequestHelper.cs
- ContentPresenter.cs
- ImageSource.cs
- BrowserPolicyValidator.cs
- TextTreeDeleteContentUndoUnit.cs
- ProjectionAnalyzer.cs
- StringFreezingAttribute.cs
- IgnoreFlushAndCloseStream.cs
- TrackingDataItem.cs
- IteratorDescriptor.cs
- ToolStripContentPanel.cs
- XmlFileEditor.cs
- SoapInteropTypes.cs
- documentsequencetextcontainer.cs
- DbParameterCollection.cs
- Accessors.cs
- HtmlInputText.cs
- CreateUserErrorEventArgs.cs
- XmlSubtreeReader.cs
- PageAsyncTaskManager.cs
- SdlChannelSink.cs
- TraceSection.cs
- EntityStoreSchemaGenerator.cs
- ObjectNavigationPropertyMapping.cs
- RIPEMD160Managed.cs
- DataPagerCommandEventArgs.cs
- Brush.cs
- BatchParser.cs
- IOException.cs
- SwitchCase.cs
- RuntimeConfigLKG.cs
- ColorInterpolationModeValidation.cs
- SQLByteStorage.cs
- PathTooLongException.cs