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
- LicenseException.cs
- XmlObjectSerializerWriteContext.cs
- ObjectCloneHelper.cs
- FontFamily.cs
- LayoutTableCell.cs
- WebZone.cs
- WebHttpDispatchOperationSelector.cs
- PublisherIdentityPermission.cs
- BuildResult.cs
- SQLByte.cs
- PasswordRecovery.cs
- MobileResource.cs
- OdbcParameterCollection.cs
- IisTraceListener.cs
- ContextStack.cs
- PermissionSetTriple.cs
- CfgParser.cs
- NativeMethods.cs
- PeerInvitationResponse.cs
- HttpInputStream.cs
- ReadWriteObjectLock.cs
- MethodBuilderInstantiation.cs
- basemetadatamappingvisitor.cs
- WebPartsSection.cs
- TraceEventCache.cs
- AssemblyNameEqualityComparer.cs
- ContextMenu.cs
- TimeSpanValidator.cs
- ProxyRpc.cs
- PropertyDescriptorComparer.cs
- TextAction.cs
- ExecutedRoutedEventArgs.cs
- SystemWebCachingSectionGroup.cs
- Block.cs
- Semaphore.cs
- ObjectStateEntry.cs
- CredentialSelector.cs
- RegexFCD.cs
- FilteredDataSetHelper.cs
- HostingEnvironmentException.cs
- ArrayHelper.cs
- MailBnfHelper.cs
- EqualityComparer.cs
- XamlReaderHelper.cs
- RoleServiceManager.cs
- SqlProvider.cs
- Char.cs
- TextRange.cs
- SQLBytesStorage.cs
- PointAnimationBase.cs
- SqlHelper.cs
- Thickness.cs
- SoapCodeExporter.cs
- ElapsedEventArgs.cs
- ToolStripItemRenderEventArgs.cs
- ChangeProcessor.cs
- AnimatedTypeHelpers.cs
- ContentPosition.cs
- DataGridViewCellValueEventArgs.cs
- Rotation3D.cs
- WindowsSolidBrush.cs
- FontCollection.cs
- PageThemeCodeDomTreeGenerator.cs
- HtmlElementErrorEventArgs.cs
- WindowsFormsSynchronizationContext.cs
- DataTemplateKey.cs
- FixedPageStructure.cs
- Translator.cs
- FontInfo.cs
- EmbeddedMailObject.cs
- CustomAttributeFormatException.cs
- Assembly.cs
- ConnectionStringsSection.cs
- XmlCDATASection.cs
- InstanceDescriptor.cs
- StorageInfo.cs
- NamedElement.cs
- DataBindingExpressionBuilder.cs
- EntityReference.cs
- TabItemAutomationPeer.cs
- DataGridViewRowPrePaintEventArgs.cs
- IDictionary.cs
- DirectionalLight.cs
- WindowsPrincipal.cs
- ClearTypeHintValidation.cs
- ToolBarOverflowPanel.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- X509ServiceCertificateAuthenticationElement.cs
- ApplicationServicesHostFactory.cs
- Size3DConverter.cs
- InplaceBitmapMetadataWriter.cs
- OperatingSystemVersionCheck.cs
- PrintSchema.cs
- DataViewManager.cs
- GuidelineCollection.cs
- RegexCompilationInfo.cs
- DESCryptoServiceProvider.cs
- InlinedAggregationOperatorEnumerator.cs
- StandardOleMarshalObject.cs
- DataGridViewRow.cs