Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ClientApiGenerator.cs
- BitmapEffectInput.cs
- Constants.cs
- BindingContext.cs
- ObjectQueryExecutionPlan.cs
- XmlElementCollection.cs
- ChtmlSelectionListAdapter.cs
- OLEDB_Util.cs
- IconConverter.cs
- InstanceCreationEditor.cs
- RewritingSimplifier.cs
- CurrentTimeZone.cs
- CacheEntry.cs
- PrivilegeNotHeldException.cs
- TypeCodeDomSerializer.cs
- BooleanAnimationBase.cs
- ArraySortHelper.cs
- IndexerNameAttribute.cs
- FileDialogCustomPlaces.cs
- LinqDataSourceUpdateEventArgs.cs
- XamlNamespaceHelper.cs
- UniqueEventHelper.cs
- WindowsGraphicsWrapper.cs
- TrackingQuery.cs
- Stroke2.cs
- RawMouseInputReport.cs
- GridViewSortEventArgs.cs
- ObjectDataSourceDesigner.cs
- login.cs
- TextDocumentView.cs
- CommonRemoteMemoryBlock.cs
- PatternMatchRules.cs
- HostUtils.cs
- SafePipeHandle.cs
- SiteMapDataSource.cs
- ExpressionWriter.cs
- SettingsBase.cs
- MemberInfoSerializationHolder.cs
- XmlSchemaAnnotation.cs
- OletxResourceManager.cs
- DependencyObjectType.cs
- XhtmlBasicObjectListAdapter.cs
- DocumentPageView.cs
- TaiwanCalendar.cs
- XmlName.cs
- SetStateDesigner.cs
- StateMachineWorkflowInstance.cs
- BamlResourceDeserializer.cs
- FontFamilyIdentifier.cs
- SelectedDatesCollection.cs
- ColumnClickEvent.cs
- IntranetCredentialPolicy.cs
- ObjectViewEntityCollectionData.cs
- DataSetSchema.cs
- ToolStripControlHost.cs
- TreeViewEvent.cs
- CultureSpecificStringDictionary.cs
- EventLogConfiguration.cs
- WhitespaceRuleLookup.cs
- DecimalAnimationBase.cs
- Sql8ConformanceChecker.cs
- DocumentApplicationDocumentViewer.cs
- DBConnection.cs
- GroupAggregateExpr.cs
- Pkcs7Recipient.cs
- PtsCache.cs
- SerializationStore.cs
- UTF8Encoding.cs
- QilIterator.cs
- SplashScreen.cs
- ControlParameter.cs
- Command.cs
- OracleConnectionString.cs
- EntityViewGenerationAttribute.cs
- SafeCryptoHandles.cs
- AutomationPattern.cs
- UshortList2.cs
- PTUtility.cs
- DescendantQuery.cs
- XmlTextReaderImpl.cs
- AxHost.cs
- DockPanel.cs
- ButtonField.cs
- Maps.cs
- SqlRewriteScalarSubqueries.cs
- TextShapeableCharacters.cs
- Page.cs
- ColorAnimationBase.cs
- AnimationException.cs
- CallbackHandler.cs
- xmlsaver.cs
- EntityDataSourceDesignerHelper.cs
- SecurityPolicySection.cs
- TypeConverterHelper.cs
- filewebresponse.cs
- CompilerCollection.cs
- MessageFilterTable.cs
- BaseAsyncResult.cs
- DataSourceCache.cs
- AxWrapperGen.cs