Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / System / Windows / TemplateKey.cs / 2 / 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; 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(System.Windows.Markup.TypeConverterHelper.EnglishUSCulture, "{0}({1})", this.GetType().Name, DataType) : String.Format(System.Windows.Markup.TypeConverterHelper.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; 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(System.Windows.Markup.TypeConverterHelper.EnglishUSCulture, "{0}({1})", this.GetType().Name, DataType) : String.Format(System.Windows.Markup.TypeConverterHelper.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
- FileVersionInfo.cs
- WindowsRebar.cs
- BaseTemplateBuildProvider.cs
- ModelPerspective.cs
- ProcessModuleCollection.cs
- StateManager.cs
- SQLString.cs
- GridViewColumnCollection.cs
- ECDiffieHellmanCngPublicKey.cs
- FollowerQueueCreator.cs
- EditorZone.cs
- XmlCharacterData.cs
- HtmlString.cs
- TextSearch.cs
- ActivityCollectionMarkupSerializer.cs
- IntSecurity.cs
- precedingquery.cs
- TypeDescriptionProviderAttribute.cs
- PropertyOverridesDialog.cs
- DataGridCellEditEndingEventArgs.cs
- ObjectQueryProvider.cs
- EntitySetBaseCollection.cs
- ListViewTableRow.cs
- WizardDesigner.cs
- TypeUnloadedException.cs
- WindowsStatusBar.cs
- StreamInfo.cs
- ItemsControlAutomationPeer.cs
- ImageMapEventArgs.cs
- ToolStripSeparatorRenderEventArgs.cs
- OleDbDataAdapter.cs
- DispatcherFrame.cs
- MDIWindowDialog.cs
- DataTemplateKey.cs
- CuspData.cs
- PageCodeDomTreeGenerator.cs
- LinqDataSourceContextData.cs
- WebSysDescriptionAttribute.cs
- OleServicesContext.cs
- HttpGetProtocolReflector.cs
- BooleanToVisibilityConverter.cs
- StringValidator.cs
- TableCellCollection.cs
- ChangeProcessor.cs
- MediaPlayer.cs
- WindowsComboBox.cs
- SelectQueryOperator.cs
- IdentityReference.cs
- ExceptionTrace.cs
- SqlClientFactory.cs
- TypeElement.cs
- DataViewSettingCollection.cs
- PluralizationService.cs
- FillErrorEventArgs.cs
- PixelFormatConverter.cs
- CorrelationHandle.cs
- AuthorizationSection.cs
- ReverseInheritProperty.cs
- SynchronizedReadOnlyCollection.cs
- BitmapSource.cs
- CodeTypeDelegate.cs
- HostingMessageProperty.cs
- GAC.cs
- MediaPlayer.cs
- TargetControlTypeCache.cs
- EdmSchemaError.cs
- NullableFloatSumAggregationOperator.cs
- WebPartCatalogCloseVerb.cs
- DataSetMappper.cs
- HyperLinkColumn.cs
- FormClosedEvent.cs
- EventToken.cs
- LocalValueEnumerator.cs
- StringAnimationBase.cs
- AdCreatedEventArgs.cs
- SoapCommonClasses.cs
- IntegrationExceptionEventArgs.cs
- VisualBrush.cs
- EventData.cs
- CookieProtection.cs
- RequestCache.cs
- DataSysAttribute.cs
- SafeNativeMethods.cs
- QilInvokeLateBound.cs
- SiteMapHierarchicalDataSourceView.cs
- QilInvokeLateBound.cs
- SafeCryptoHandles.cs
- ComponentSerializationService.cs
- QueryOutputWriter.cs
- NameTable.cs
- WebPartHelpVerb.cs
- TextComposition.cs
- DataGridViewColumnHeaderCell.cs
- EntityContainerRelationshipSetEnd.cs
- PassportAuthenticationEventArgs.cs
- LinqDataSourceSelectEventArgs.cs
- XmlSchemaChoice.cs
- DbgUtil.cs
- DbConvert.cs
- LayoutSettings.cs