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
- OleDbDataReader.cs
- TextContainerChangeEventArgs.cs
- Parallel.cs
- SelectionItemProviderWrapper.cs
- SymLanguageType.cs
- SoapExtensionImporter.cs
- SqlDataSourceStatusEventArgs.cs
- InternalEnumValidatorAttribute.cs
- XmlAttributes.cs
- ItemContainerGenerator.cs
- Select.cs
- Win32PrintDialog.cs
- X509ServiceCertificateAuthenticationElement.cs
- AutoCompleteStringCollection.cs
- GridItemProviderWrapper.cs
- XPathAncestorIterator.cs
- ProjectionCamera.cs
- AppDomainManager.cs
- Int32CAMarshaler.cs
- UITypeEditors.cs
- ManagedWndProcTracker.cs
- VarRemapper.cs
- _NegoState.cs
- Cursor.cs
- MetadataArtifactLoaderComposite.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- CodeVariableReferenceExpression.cs
- DesignerActionVerbItem.cs
- DataKeyCollection.cs
- TextureBrush.cs
- RoleManagerEventArgs.cs
- Page.cs
- CookieProtection.cs
- XPathAncestorQuery.cs
- DataGridViewAdvancedBorderStyle.cs
- MulticastOption.cs
- SettingsPropertyNotFoundException.cs
- ServerIdentity.cs
- ContourSegment.cs
- XmlEnumAttribute.cs
- TransformGroup.cs
- ModifierKeysValueSerializer.cs
- PresentationTraceSources.cs
- SkewTransform.cs
- GetLedgerEntryForRecipientRequest.cs
- ListParaClient.cs
- AssemblyAttributes.cs
- NetworkStream.cs
- CaseInsensitiveHashCodeProvider.cs
- ValueTypePropertyReference.cs
- WebPartMinimizeVerb.cs
- ParameterModifier.cs
- FakeModelItemImpl.cs
- WmfPlaceableFileHeader.cs
- HttpAsyncResult.cs
- HuffCodec.cs
- CodeNamespaceImportCollection.cs
- StructuralObject.cs
- DecimalAnimation.cs
- WebProxyScriptElement.cs
- GlyphingCache.cs
- JsonReaderDelegator.cs
- StateMachineExecutionState.cs
- GregorianCalendar.cs
- SerializableAttribute.cs
- EtwProvider.cs
- login.cs
- ConfigurationLocationCollection.cs
- Rectangle.cs
- Hashtable.cs
- DBNull.cs
- ElapsedEventArgs.cs
- ProjectionPathSegment.cs
- HierarchicalDataBoundControl.cs
- PkcsUtils.cs
- EntityClassGenerator.cs
- Light.cs
- ProtectedProviderSettings.cs
- SystemIPGlobalStatistics.cs
- HtmlTableRow.cs
- SqlTriggerAttribute.cs
- PolyLineSegmentFigureLogic.cs
- PolicyException.cs
- CodeLinePragma.cs
- GridViewSortEventArgs.cs
- WinEventTracker.cs
- PersonalizationState.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- Listbox.cs
- ThicknessAnimationBase.cs
- LayoutInformation.cs
- Label.cs
- ErrorItem.cs
- Assembly.cs
- PropertyChangeTracker.cs
- TextEditorContextMenu.cs
- TextBoxAutoCompleteSourceConverter.cs
- DataBindingValueUIHandler.cs
- NameSpaceEvent.cs
- BaseCollection.cs