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
- CssClassPropertyAttribute.cs
- HttpGetClientProtocol.cs
- ValidationHelpers.cs
- WebPartAddingEventArgs.cs
- WeakEventManager.cs
- IndicCharClassifier.cs
- ToolStripDesignerAvailabilityAttribute.cs
- ImportContext.cs
- CaseStatement.cs
- AppDomainManager.cs
- WebPartCatalogCloseVerb.cs
- Visual3D.cs
- SrgsSemanticInterpretationTag.cs
- PtsContext.cs
- AllMembershipCondition.cs
- XmlAggregates.cs
- ApplicationDirectoryMembershipCondition.cs
- AttributeParameterInfo.cs
- XmlQueryCardinality.cs
- NavigatorOutput.cs
- WebPartsSection.cs
- CodeMemberEvent.cs
- ListView.cs
- PtsContext.cs
- CodeArrayIndexerExpression.cs
- DataListItem.cs
- AnimatedTypeHelpers.cs
- ConfigXmlComment.cs
- DataServiceRequestException.cs
- SoapReflectionImporter.cs
- WebBrowserBase.cs
- LiteralTextContainerControlBuilder.cs
- SourceChangedEventArgs.cs
- TextDpi.cs
- NewItemsContextMenuStrip.cs
- RemoteWebConfigurationHost.cs
- ChannelBase.cs
- ScrollContentPresenter.cs
- TypeGeneratedEventArgs.cs
- HostExecutionContextManager.cs
- TimelineGroup.cs
- GlyphShapingProperties.cs
- ProcessInfo.cs
- HttpPostedFileWrapper.cs
- ClonableStack.cs
- ToolBarTray.cs
- KeyMatchBuilder.cs
- OletxResourceManager.cs
- CalculatedColumn.cs
- DefaultObjectMappingItemCollection.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- NumericUpDown.cs
- HttpListenerResponse.cs
- ComponentRenameEvent.cs
- ToolStripPanelRenderEventArgs.cs
- Authorization.cs
- WeakRefEnumerator.cs
- GridPatternIdentifiers.cs
- SQLInt64.cs
- TraceHwndHost.cs
- ModifierKeysValueSerializer.cs
- ToolStripItemEventArgs.cs
- Activation.cs
- SchemaComplexType.cs
- ContractAdapter.cs
- WindowsUpDown.cs
- LinkTarget.cs
- ApplicationBuildProvider.cs
- ListContractAdapter.cs
- DriveInfo.cs
- WindowsGraphicsWrapper.cs
- StorageMappingFragment.cs
- SEHException.cs
- SqlReferenceCollection.cs
- PageBuildProvider.cs
- TextTreeTextBlock.cs
- BuilderPropertyEntry.cs
- XmlQueryOutput.cs
- Transform.cs
- RuntimeHandles.cs
- DataStreams.cs
- Mapping.cs
- HexParser.cs
- TextRunCacheImp.cs
- ResolveResponseInfo.cs
- DateTimeConverter2.cs
- FrugalList.cs
- WebPartManagerDesigner.cs
- ClientSideQueueItem.cs
- TrustManager.cs
- SchemaObjectWriter.cs
- RangeValidator.cs
- SessionEndingEventArgs.cs
- ProcessingInstructionAction.cs
- MD5HashHelper.cs
- Object.cs
- Triplet.cs
- EmptyElement.cs
- WebBrowserPermission.cs
- PropertyGroupDescription.cs