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
- IfJoinedCondition.cs
- OleDbInfoMessageEvent.cs
- TemplateColumn.cs
- TextFormatterContext.cs
- FixedBufferAttribute.cs
- StateChangeEvent.cs
- URLAttribute.cs
- EraserBehavior.cs
- IdentitySection.cs
- ListControlActionList.cs
- WpfPayload.cs
- IisNotInstalledException.cs
- EqualityArray.cs
- DataViewManagerListItemTypeDescriptor.cs
- ListSortDescriptionCollection.cs
- TypeValidationEventArgs.cs
- VisualStyleElement.cs
- DesignerToolboxInfo.cs
- ClockGroup.cs
- StyleReferenceConverter.cs
- ComponentSerializationService.cs
- GeneralTransform3DTo2DTo3D.cs
- MenuRendererStandards.cs
- AppSettingsExpressionBuilder.cs
- QilTernary.cs
- AdornerPresentationContext.cs
- XsltSettings.cs
- ItemsChangedEventArgs.cs
- CanonicalizationDriver.cs
- AppSettingsExpressionBuilder.cs
- StructuredType.cs
- SqlTriggerContext.cs
- Adorner.cs
- MessageBuilder.cs
- IChannel.cs
- MaskedTextBoxTextEditorDropDown.cs
- DeclarativeCatalogPart.cs
- DBSchemaRow.cs
- BooleanFunctions.cs
- streamingZipPartStream.cs
- PropertyChangedEventArgs.cs
- AssertSection.cs
- QuaternionAnimationBase.cs
- CultureTableRecord.cs
- NativeCppClassAttribute.cs
- DSACryptoServiceProvider.cs
- SystemIcons.cs
- CodeExpressionCollection.cs
- Content.cs
- ObjectDataSourceMethodEventArgs.cs
- ZeroOpNode.cs
- CultureMapper.cs
- _CommandStream.cs
- DataGridViewEditingControlShowingEventArgs.cs
- GACMembershipCondition.cs
- WebPartDisplayModeCollection.cs
- CodeNamespaceImport.cs
- TokenBasedSet.cs
- InstanceKey.cs
- VisualCollection.cs
- MenuCommand.cs
- MetadataSource.cs
- AnnotationObservableCollection.cs
- SqlDataReader.cs
- Symbol.cs
- Model3DGroup.cs
- InternalDispatchObject.cs
- CredentialSelector.cs
- CodeTypeReference.cs
- Attributes.cs
- ExeConfigurationFileMap.cs
- RadioButtonFlatAdapter.cs
- XamlReader.cs
- PropertyGeneratedEventArgs.cs
- Configuration.cs
- DataObjectEventArgs.cs
- InitializerFacet.cs
- XmlEncodedRawTextWriter.cs
- ParseHttpDate.cs
- WebPartCloseVerb.cs
- CodeGeneratorAttribute.cs
- TPLETWProvider.cs
- DrawingGroup.cs
- PasswordValidationException.cs
- ChildTable.cs
- XmlChildEnumerator.cs
- WebPartRestoreVerb.cs
- Tuple.cs
- ADMembershipProvider.cs
- StylusCollection.cs
- MediaPlayer.cs
- TranslateTransform.cs
- GenericAuthenticationEventArgs.cs
- ReadOnlyHierarchicalDataSourceView.cs
- ParentQuery.cs
- X509Certificate2.cs
- LoggedException.cs
- CheckableControlBaseAdapter.cs
- FileDataSourceCache.cs
- IndexedString.cs