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
- RuntimeResourceSet.cs
- OperationCanceledException.cs
- ComplexObject.cs
- DecoderReplacementFallback.cs
- RoleExceptions.cs
- MexHttpBindingElement.cs
- UserNameServiceElement.cs
- FocusTracker.cs
- PkcsUtils.cs
- SessionStateItemCollection.cs
- FunctionUpdateCommand.cs
- ProbeDuplexCD1AsyncResult.cs
- WorkflowView.cs
- CodeCommentStatement.cs
- IndividualDeviceConfig.cs
- AsymmetricSecurityProtocol.cs
- OutputScopeManager.cs
- FormsAuthenticationEventArgs.cs
- XmlTypeMapping.cs
- _Semaphore.cs
- SQLConvert.cs
- ColorConverter.cs
- FormViewPageEventArgs.cs
- BitmapData.cs
- StyleHelper.cs
- DisableDpiAwarenessAttribute.cs
- HttpListener.cs
- DataShape.cs
- CheckBoxField.cs
- MatrixCamera.cs
- DivideByZeroException.cs
- DataTemplate.cs
- RealProxy.cs
- ComplexType.cs
- EmptyEnumerator.cs
- StreamingContext.cs
- NTAccount.cs
- GeometryModel3D.cs
- PageAction.cs
- ParallelEnumerableWrapper.cs
- AstTree.cs
- XmlSchemaChoice.cs
- HtmlControlPersistable.cs
- Point.cs
- ScriptManagerProxy.cs
- BrowserDefinitionCollection.cs
- Task.cs
- PkcsMisc.cs
- assertwrapper.cs
- CollectionBase.cs
- ExceptionHandler.cs
- ItemsChangedEventArgs.cs
- ConnectionPoint.cs
- GridViewAutomationPeer.cs
- SafeNativeMethods.cs
- MenuAutomationPeer.cs
- ZipIOExtraFieldPaddingElement.cs
- IUnknownConstantAttribute.cs
- ClickablePoint.cs
- MergeFailedEvent.cs
- Control.cs
- XmlILStorageConverter.cs
- StateDesigner.Helpers.cs
- AdobeCFFWrapper.cs
- ProfessionalColorTable.cs
- HwndMouseInputProvider.cs
- Point.cs
- DataViewManager.cs
- MemberJoinTreeNode.cs
- MouseGestureConverter.cs
- SmtpNtlmAuthenticationModule.cs
- NotifyParentPropertyAttribute.cs
- RoutedPropertyChangedEventArgs.cs
- DeobfuscatingStream.cs
- IPipelineRuntime.cs
- CollaborationHelperFunctions.cs
- NamespaceMapping.cs
- typedescriptorpermissionattribute.cs
- SystemThemeKey.cs
- EnumerableRowCollectionExtensions.cs
- ImageInfo.cs
- ZipPackagePart.cs
- XmlPropertyBag.cs
- UriWriter.cs
- QualificationDataAttribute.cs
- storepermission.cs
- Predicate.cs
- BookmarkScopeHandle.cs
- TemplateKeyConverter.cs
- InheritanceContextChangedEventManager.cs
- EventProviderWriter.cs
- ListBindingConverter.cs
- Selection.cs
- UserControlBuildProvider.cs
- IPCCacheManager.cs
- SerialReceived.cs
- OleDbError.cs
- CmsUtils.cs
- Screen.cs
- Matrix3D.cs