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
- TypeElement.cs
- LoginView.cs
- SupportsPreviewControlAttribute.cs
- AttributeAction.cs
- StrokeFIndices.cs
- Peer.cs
- WebServiceBindingAttribute.cs
- connectionpool.cs
- PageHandlerFactory.cs
- DataRelation.cs
- OpenTypeLayoutCache.cs
- SourceItem.cs
- CompiledIdentityConstraint.cs
- SpecularMaterial.cs
- SelectionEditingBehavior.cs
- XmlAttributeOverrides.cs
- BufferedWebEventProvider.cs
- XpsDigitalSignature.cs
- XmlChoiceIdentifierAttribute.cs
- DeferredTextReference.cs
- SessionSymmetricMessageSecurityProtocolFactory.cs
- ValidationSummary.cs
- OpCopier.cs
- DigitShape.cs
- StackBuilderSink.cs
- NullableConverter.cs
- SQLChars.cs
- SchemaLookupTable.cs
- ZoneIdentityPermission.cs
- ProcessThreadCollection.cs
- XmlChildNodes.cs
- CodeExpressionStatement.cs
- CollectionExtensions.cs
- EdmToObjectNamespaceMap.cs
- ZoneLinkButton.cs
- ListViewInsertEventArgs.cs
- ClusterUtils.cs
- HostingMessageProperty.cs
- BigInt.cs
- Crypto.cs
- DataRow.cs
- Sequence.cs
- DurableInstance.cs
- Underline.cs
- AppDomainFactory.cs
- Style.cs
- NameValuePermission.cs
- DateTime.cs
- RequestChannelBinder.cs
- PropagatorResult.cs
- ListChangedEventArgs.cs
- TransformProviderWrapper.cs
- TextEditorParagraphs.cs
- CommandManager.cs
- SignedPkcs7.cs
- GregorianCalendarHelper.cs
- MarkupCompilePass1.cs
- CacheAxisQuery.cs
- DockPatternIdentifiers.cs
- RegisteredDisposeScript.cs
- ActionItem.cs
- Logging.cs
- FlowLayoutSettings.cs
- UshortList2.cs
- ToolStripItemCollection.cs
- BufferedGraphicsManager.cs
- PropertyAccessVisitor.cs
- GraphicsContext.cs
- Trigger.cs
- X509CertificateCollection.cs
- SafeLocalMemHandle.cs
- Psha1DerivedKeyGenerator.cs
- Cursor.cs
- RouteItem.cs
- MultipartIdentifier.cs
- ValidateNames.cs
- ClonableStack.cs
- DoubleAnimationUsingKeyFrames.cs
- ThreadInterruptedException.cs
- ValuePattern.cs
- AxHost.cs
- Stack.cs
- __Filters.cs
- Module.cs
- UrlUtility.cs
- PathGeometry.cs
- CompensationExtension.cs
- XmlChildEnumerator.cs
- ParallelDesigner.xaml.cs
- ScopedKnownTypes.cs
- MenuItemBinding.cs
- _AutoWebProxyScriptEngine.cs
- ElementsClipboardData.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- HitTestDrawingContextWalker.cs
- IfAction.cs
- QueryableDataSourceHelper.cs
- DataGridViewComboBoxEditingControl.cs
- SettingsPropertyIsReadOnlyException.cs
- GcSettings.cs