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
- CapabilitiesPattern.cs
- DependencyProperty.cs
- DetailsViewRow.cs
- RunInstallerAttribute.cs
- UpDownEvent.cs
- SecurityKeyIdentifierClause.cs
- TextLineBreak.cs
- MarkupCompilePass1.cs
- StatusBar.cs
- Attributes.cs
- ToolStripGrip.cs
- Scripts.cs
- FixedDocumentSequencePaginator.cs
- FileRegion.cs
- ConfigXmlAttribute.cs
- OracleDataAdapter.cs
- SizeKeyFrameCollection.cs
- BinaryMessageFormatter.cs
- Graphics.cs
- GroupDescription.cs
- GZipDecoder.cs
- CDSsyncETWBCLProvider.cs
- SQLCharsStorage.cs
- DiagnosticStrings.cs
- BitmapImage.cs
- Point4D.cs
- RecordsAffectedEventArgs.cs
- TableItemProviderWrapper.cs
- StandardOleMarshalObject.cs
- TypeSource.cs
- PropertyGrid.cs
- GradientBrush.cs
- GetUserPreferenceRequest.cs
- DetailsViewRow.cs
- MultiByteCodec.cs
- RadioButton.cs
- SettingsAttributes.cs
- StylusDevice.cs
- NonBatchDirectoryCompiler.cs
- TextTreeInsertUndoUnit.cs
- TypedDatasetGenerator.cs
- EncryptedHeaderXml.cs
- CompilerGeneratedAttribute.cs
- RetrieveVirtualItemEventArgs.cs
- QueryContinueDragEvent.cs
- CodeAccessSecurityEngine.cs
- Gdiplus.cs
- DrawListViewItemEventArgs.cs
- CalendarDay.cs
- WriteableBitmap.cs
- EdmSchemaAttribute.cs
- Grant.cs
- TraceLog.cs
- HuffmanTree.cs
- ProcessRequestArgs.cs
- remotingproxy.cs
- RefExpr.cs
- OdbcUtils.cs
- MonitoringDescriptionAttribute.cs
- RangeValueProviderWrapper.cs
- Clipboard.cs
- InvalidChannelBindingException.cs
- EntityCommandCompilationException.cs
- SparseMemoryStream.cs
- XmlByteStreamWriter.cs
- DataGridViewRowsAddedEventArgs.cs
- HWStack.cs
- GridViewColumn.cs
- PropertyToken.cs
- StretchValidation.cs
- UpdateRecord.cs
- NamespaceEmitter.cs
- WarningException.cs
- WCFModelStrings.Designer.cs
- ReadOnlyPropertyMetadata.cs
- Constant.cs
- PartialList.cs
- Vector3dCollection.cs
- SourceLineInfo.cs
- PointLightBase.cs
- CellCreator.cs
- AppDomainManager.cs
- DisposableCollectionWrapper.cs
- DataGridViewCellConverter.cs
- RequestSecurityTokenForGetBrowserToken.cs
- WebServiceHost.cs
- ProviderSettings.cs
- AtomServiceDocumentSerializer.cs
- WbmpConverter.cs
- ExpressionParser.cs
- RequestCacheValidator.cs
- FieldAccessException.cs
- DynamicUpdateCommand.cs
- MD5CryptoServiceProvider.cs
- OdbcEnvironmentHandle.cs
- CodeExpressionStatement.cs
- FormsIdentity.cs
- MouseButtonEventArgs.cs
- Token.cs
- SplineKeyFrames.cs