Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / TemplateKey.cs / 1 / TemplateKey.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Base class for DataTemplateKey, TableTemplateKey.
//
//---------------------------------------------------------------------------
using System;
using System.Reflection;
using System.ComponentModel;
using System.Windows.Markup;
using MS.Internal.Data; // DataBindEngine.EnglishUSCulture
namespace System.Windows
{
/// The TemplateKey object is used as the resource key for data templates
[TypeConverter(typeof(TemplateKeyConverter))]
public abstract class TemplateKey : ResourceKey, ISupportInitialize
{
/// Constructor (called by derived classes only)
protected TemplateKey(TemplateType templateType)
{
_dataType = null; // still needs to be initialized
_templateType = templateType;
}
/// Constructor (called by derived classes only)
protected TemplateKey(TemplateType templateType, object dataType)
{
Exception ex = ValidateDataType(dataType, "dataType");
if (ex != null)
throw ex;
_dataType = dataType;
_templateType = templateType;
}
#region ISupportInitialize
/// Begin Initialization
void ISupportInitialize.BeginInit()
{
_initializing = true;
}
/// End Initialization, verify that internal state is consistent
void ISupportInitialize.EndInit()
{
if (_dataType == null)
{
throw new InvalidOperationException(SR.Get(SRID.PropertyMustHaveValue, "DataType", this.GetType().Name));
}
_initializing = false;
}
#endregion ISupportInitialize
///
/// The type for which the template is designed. This is either
/// a Type (for object data), or a string (for XML data). In the latter
/// case the string denotes the XML tag name.
///
public object DataType
{
get { return _dataType; }
set
{
if (!_initializing)
throw new InvalidOperationException(SR.Get(SRID.PropertyIsInitializeOnly, "DataType", this.GetType().Name));
if (_dataType != null && value != _dataType)
throw new InvalidOperationException(SR.Get(SRID.PropertyIsImmutable, "DataType", this.GetType().Name));
Exception ex = ValidateDataType(value, "value");
if (ex != null)
throw ex;
_dataType = value;
}
}
/// Override of Object.GetHashCode()
public override int GetHashCode()
{
// note that the hash code can change, but only during intialization
// and only once (DataType can only be changed once, from null to
// non-null, and that can only happen during [Begin/End]Init).
// Technically this is still a violation of the "constant during
// lifetime" rule, however in practice this is acceptable. It is
// very unlikely that someone will put a TemplateKey into a hashtable
// before it is initialized.
int hashcode = (int)_templateType;
if (_dataType != null)
{
hashcode += _dataType.GetHashCode();
}
return hashcode;
}
/// Override of Object.Equals()
public override bool Equals(object o)
{
TemplateKey key = o as TemplateKey;
if (key != null)
{
return _templateType == key._templateType &&
Object.Equals(_dataType, key._dataType);
}
return false;
}
/// Override of Object.ToString()
public override string ToString()
{
Type type = DataType as Type;
return (DataType != null)
? String.Format(DataBindEngine.EnglishUSCulture, "{0}({1})",
this.GetType().Name, DataType)
: String.Format(DataBindEngine.EnglishUSCulture, "{0}(null)",
this.GetType().Name);
}
///
/// Allows SystemResources to know which assembly the template might be defined in.
///
public override Assembly Assembly
{
get
{
Type type = _dataType as Type;
if (type != null)
{
return type.Assembly;
}
return null;
}
}
/// The different types of templates that use TemplateKey
protected enum TemplateType
{
/// DataTemplate
DataTemplate,
/// TableTemplate
TableTemplate,
}
// Validate against these rules
// 1. dataType must not be null (except at initialization, which is tested at EndInit)
// 2. dataType must be either a Type (object data) or a string (XML tag name)
// 3. dataType cannot be typeof(Object)
internal static Exception ValidateDataType(object dataType, string argName)
{
Exception result = null;
if (dataType == null)
{
result = new ArgumentNullException(argName);
}
else if (!(dataType is Type) && !(dataType is String))
{
result = new ArgumentException(SR.Get(SRID.MustBeTypeOrString, dataType.GetType().Name), argName);
}
else if (dataType == typeof(Object))
{
result = new ArgumentException(SR.Get(SRID.DataTypeCannotBeObject), argName);
}
return result;
}
object _dataType;
TemplateType _templateType;
bool _initializing;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Base class for DataTemplateKey, TableTemplateKey.
//
//---------------------------------------------------------------------------
using System;
using System.Reflection;
using System.ComponentModel;
using System.Windows.Markup;
using MS.Internal.Data; // DataBindEngine.EnglishUSCulture
namespace System.Windows
{
/// The TemplateKey object is used as the resource key for data templates
[TypeConverter(typeof(TemplateKeyConverter))]
public abstract class TemplateKey : ResourceKey, ISupportInitialize
{
/// Constructor (called by derived classes only)
protected TemplateKey(TemplateType templateType)
{
_dataType = null; // still needs to be initialized
_templateType = templateType;
}
/// Constructor (called by derived classes only)
protected TemplateKey(TemplateType templateType, object dataType)
{
Exception ex = ValidateDataType(dataType, "dataType");
if (ex != null)
throw ex;
_dataType = dataType;
_templateType = templateType;
}
#region ISupportInitialize
/// Begin Initialization
void ISupportInitialize.BeginInit()
{
_initializing = true;
}
/// End Initialization, verify that internal state is consistent
void ISupportInitialize.EndInit()
{
if (_dataType == null)
{
throw new InvalidOperationException(SR.Get(SRID.PropertyMustHaveValue, "DataType", this.GetType().Name));
}
_initializing = false;
}
#endregion ISupportInitialize
///
/// The type for which the template is designed. This is either
/// a Type (for object data), or a string (for XML data). In the latter
/// case the string denotes the XML tag name.
///
public object DataType
{
get { return _dataType; }
set
{
if (!_initializing)
throw new InvalidOperationException(SR.Get(SRID.PropertyIsInitializeOnly, "DataType", this.GetType().Name));
if (_dataType != null && value != _dataType)
throw new InvalidOperationException(SR.Get(SRID.PropertyIsImmutable, "DataType", this.GetType().Name));
Exception ex = ValidateDataType(value, "value");
if (ex != null)
throw ex;
_dataType = value;
}
}
/// Override of Object.GetHashCode()
public override int GetHashCode()
{
// note that the hash code can change, but only during intialization
// and only once (DataType can only be changed once, from null to
// non-null, and that can only happen during [Begin/End]Init).
// Technically this is still a violation of the "constant during
// lifetime" rule, however in practice this is acceptable. It is
// very unlikely that someone will put a TemplateKey into a hashtable
// before it is initialized.
int hashcode = (int)_templateType;
if (_dataType != null)
{
hashcode += _dataType.GetHashCode();
}
return hashcode;
}
/// Override of Object.Equals()
public override bool Equals(object o)
{
TemplateKey key = o as TemplateKey;
if (key != null)
{
return _templateType == key._templateType &&
Object.Equals(_dataType, key._dataType);
}
return false;
}
/// Override of Object.ToString()
public override string ToString()
{
Type type = DataType as Type;
return (DataType != null)
? String.Format(DataBindEngine.EnglishUSCulture, "{0}({1})",
this.GetType().Name, DataType)
: String.Format(DataBindEngine.EnglishUSCulture, "{0}(null)",
this.GetType().Name);
}
///
/// Allows SystemResources to know which assembly the template might be defined in.
///
public override Assembly Assembly
{
get
{
Type type = _dataType as Type;
if (type != null)
{
return type.Assembly;
}
return null;
}
}
/// The different types of templates that use TemplateKey
protected enum TemplateType
{
/// DataTemplate
DataTemplate,
/// TableTemplate
TableTemplate,
}
// Validate against these rules
// 1. dataType must not be null (except at initialization, which is tested at EndInit)
// 2. dataType must be either a Type (object data) or a string (XML tag name)
// 3. dataType cannot be typeof(Object)
internal static Exception ValidateDataType(object dataType, string argName)
{
Exception result = null;
if (dataType == null)
{
result = new ArgumentNullException(argName);
}
else if (!(dataType is Type) && !(dataType is String))
{
result = new ArgumentException(SR.Get(SRID.MustBeTypeOrString, dataType.GetType().Name), argName);
}
else if (dataType == typeof(Object))
{
result = new ArgumentException(SR.Get(SRID.DataTypeCannotBeObject), argName);
}
return result;
}
object _dataType;
TemplateType _templateType;
bool _initializing;
}
}
// 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
- SiteMapSection.cs
- diagnosticsswitches.cs
- PostBackOptions.cs
- Int64Storage.cs
- _DigestClient.cs
- VectorAnimationUsingKeyFrames.cs
- FixedFindEngine.cs
- MarkupCompilePass2.cs
- MouseGesture.cs
- AttachedPropertyMethodSelector.cs
- CaretElement.cs
- ResourcesGenerator.cs
- RowToFieldTransformer.cs
- ProfilePropertySettings.cs
- SelectionProviderWrapper.cs
- VirtualDirectoryMappingCollection.cs
- TextElementEnumerator.cs
- TraceSection.cs
- SocketElement.cs
- __FastResourceComparer.cs
- ToggleProviderWrapper.cs
- ReferencedCollectionType.cs
- SoapIgnoreAttribute.cs
- WinEventWrap.cs
- DataTableClearEvent.cs
- DataGridItemEventArgs.cs
- PageThemeParser.cs
- GenericUriParser.cs
- InputElement.cs
- InputScopeAttribute.cs
- CompModSwitches.cs
- DataGridViewRowsRemovedEventArgs.cs
- BuiltInExpr.cs
- CompareInfo.cs
- DataDocumentXPathNavigator.cs
- LinearKeyFrames.cs
- MsmqIntegrationInputMessage.cs
- _Semaphore.cs
- ServiceNameCollection.cs
- MultipartContentParser.cs
- DefaultValueAttribute.cs
- PropertyManager.cs
- SkewTransform.cs
- BinaryFormatter.cs
- PolicyValidationException.cs
- ClientBuildManagerCallback.cs
- New.cs
- sqlser.cs
- WsatServiceCertificate.cs
- ListenerElementsCollection.cs
- StylusEventArgs.cs
- SecurityMessageProperty.cs
- PeerName.cs
- FontSizeConverter.cs
- WindowsListView.cs
- Solver.cs
- FontClient.cs
- KeyEventArgs.cs
- AuthenticatingEventArgs.cs
- ValueQuery.cs
- WSHttpBindingElement.cs
- SizeLimitedCache.cs
- ExpanderAutomationPeer.cs
- ConfigurationStrings.cs
- Application.cs
- ZipIORawDataFileBlock.cs
- ObservableCollection.cs
- RangeValidator.cs
- Processor.cs
- ContentTextAutomationPeer.cs
- TreeViewImageKeyConverter.cs
- IndicFontClient.cs
- WmpBitmapEncoder.cs
- DataSetMappper.cs
- CacheDependency.cs
- AssociationType.cs
- ValueProviderWrapper.cs
- CalendarTable.cs
- SqlRewriteScalarSubqueries.cs
- BlurBitmapEffect.cs
- codemethodreferenceexpression.cs
- ParentQuery.cs
- URLString.cs
- ReflectEventDescriptor.cs
- SAPICategories.cs
- DbUpdateCommandTree.cs
- NameValuePair.cs
- FactoryRecord.cs
- WebPartUtil.cs
- FontFamilyConverter.cs
- COM2ExtendedBrowsingHandler.cs
- TextDecorationUnitValidation.cs
- TabControlCancelEvent.cs
- ItemAutomationPeer.cs
- ClientBuildManager.cs
- EditorPartCollection.cs
- TabControlCancelEvent.cs
- DataListItemCollection.cs
- DocumentEventArgs.cs
- TraceHandlerErrorFormatter.cs