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
- BuildDependencySet.cs
- AdornerDecorator.cs
- PathGradientBrush.cs
- PointF.cs
- HtmlProps.cs
- DataGridViewElement.cs
- VisualStyleTypesAndProperties.cs
- FillRuleValidation.cs
- InstanceHandleReference.cs
- StylusPointProperty.cs
- DataRelation.cs
- IntSecurity.cs
- ListViewUpdateEventArgs.cs
- UncommonField.cs
- BrushValueSerializer.cs
- UIPropertyMetadata.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ReadOnlyCollectionBase.cs
- BorderGapMaskConverter.cs
- AssociationSetEnd.cs
- CollectionChangeEventArgs.cs
- ShaperBuffers.cs
- PtsPage.cs
- ReversePositionQuery.cs
- TableLayoutPanelBehavior.cs
- CryptoKeySecurity.cs
- KeyConstraint.cs
- ProgressBarRenderer.cs
- DocumentSequence.cs
- NamedElement.cs
- ImageMap.cs
- ThicknessKeyFrameCollection.cs
- isolationinterop.cs
- TargetControlTypeCache.cs
- ConnectionStringsExpressionEditor.cs
- TrackingServices.cs
- DataRowChangeEvent.cs
- designeractionlistschangedeventargs.cs
- WebConfigurationManager.cs
- TextAnchor.cs
- CatalogPartCollection.cs
- HostAdapter.cs
- ErrorHandlerModule.cs
- PrivateFontCollection.cs
- TabItem.cs
- DataGridBoolColumn.cs
- InheritanceAttribute.cs
- PointLightBase.cs
- EntityParameterCollection.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- CLRBindingWorker.cs
- SqlDataSourceCache.cs
- CompilerGeneratedAttribute.cs
- DiscreteKeyFrames.cs
- TreeIterators.cs
- EntityDataSourceContextDisposingEventArgs.cs
- DataSource.cs
- Bits.cs
- SqlDataSourceRefreshSchemaForm.cs
- RequestCachePolicy.cs
- SByte.cs
- HyperLinkColumn.cs
- ScriptResourceHandler.cs
- EventSourceCreationData.cs
- ToolStripItem.cs
- MetadataItem_Static.cs
- ChannelDemuxer.cs
- ConnectionConsumerAttribute.cs
- AssemblyHash.cs
- WinHttpWebProxyFinder.cs
- GetMemberBinder.cs
- ValidationPropertyAttribute.cs
- DataKeyCollection.cs
- CodeTypeDeclarationCollection.cs
- Context.cs
- XmlHierarchyData.cs
- Missing.cs
- RequestContext.cs
- ZipIOLocalFileDataDescriptor.cs
- MaterialGroup.cs
- InProcStateClientManager.cs
- documentation.cs
- WeakKeyDictionary.cs
- Brush.cs
- IndentedWriter.cs
- ErrorActivity.cs
- FileSystemEventArgs.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- DrawingContextDrawingContextWalker.cs
- TrustManagerMoreInformation.cs
- ExecutionEngineException.cs
- DataGridViewImageCell.cs
- WebSysDisplayNameAttribute.cs
- ContentWrapperAttribute.cs
- EventEntry.cs
- GenericEnumerator.cs
- QuadraticBezierSegment.cs
- HwndSourceParameters.cs
- StrokeDescriptor.cs
- AnnouncementSendsAsyncResult.cs