Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / MS / Internal / InheritanceContextHelper.cs / 1 / InheritanceContextHelper.cs
/****************************************************************************\ * * File: InheritanceContextHelper.cs * * This file holds a helper class for DO subclasses that implement an * inheritance context. * * Copyright (C) by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.Windows; using MS.Internal.WindowsBase; namespace MS.Internal { internal static class InheritanceContextHelper { //------------------------------------------------------------------- // // ProvideContextForObject // // Tell a DO that it has a new inheritance context available. // //------------------------------------------------------------------- [FriendAccessAllowed] // Built into Core, also used by Framework. internal static void ProvideContextForObject( DependencyObject context, DependencyObject newValue ) { if (context != null) { context.ProvideSelfAsInheritanceContext(newValue, null); } } //------------------------------------------------------------------- // // RemoveContextFromObject // // Tell a DO that it has lost its inheritance context. // //-------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void RemoveContextFromObject( DependencyObject context, DependencyObject oldValue ) { if (context != null && oldValue.InheritanceContext == context) { context.RemoveSelfAsInheritanceContext(oldValue, null); } } //------------------------------------------------------------------- // // AddInheritanceContext // // Implementation to receive a new inheritance context // //-------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void AddInheritanceContext(DependencyObject newInheritanceContext, DependencyObject value, ref bool hasMultipleInheritanceContexts, ref DependencyObject inheritanceContext ) { // ignore the request when the new context is the same as the old, // or when there are already multiple contexts if (newInheritanceContext != inheritanceContext && !hasMultipleInheritanceContexts) { if (inheritanceContext == null || newInheritanceContext == null) { // Pick up the new context inheritanceContext = newInheritanceContext; } else { // We are now being referenced from multiple // places, clear the context hasMultipleInheritanceContexts = true; inheritanceContext = null; } value.OnInheritanceContextChanged(EventArgs.Empty); } } //-------------------------------------------------------------------- // // RemoveInheritanceContext // // Implementation to remove an old inheritance context // //------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void RemoveInheritanceContext(DependencyObject oldInheritanceContext, DependencyObject value, ref bool hasMultipleInheritanceContexts, ref DependencyObject inheritanceContext ) { // ignore the request when the given context doesn't match the old one, // or when there are already multiple contexts if (oldInheritanceContext == inheritanceContext && !hasMultipleInheritanceContexts) { // clear the context inheritanceContext = null; value.OnInheritanceContextChanged(EventArgs.Empty); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. /****************************************************************************\ * * File: InheritanceContextHelper.cs * * This file holds a helper class for DO subclasses that implement an * inheritance context. * * Copyright (C) by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.Windows; using MS.Internal.WindowsBase; namespace MS.Internal { internal static class InheritanceContextHelper { //------------------------------------------------------------------- // // ProvideContextForObject // // Tell a DO that it has a new inheritance context available. // //------------------------------------------------------------------- [FriendAccessAllowed] // Built into Core, also used by Framework. internal static void ProvideContextForObject( DependencyObject context, DependencyObject newValue ) { if (context != null) { context.ProvideSelfAsInheritanceContext(newValue, null); } } //------------------------------------------------------------------- // // RemoveContextFromObject // // Tell a DO that it has lost its inheritance context. // //-------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void RemoveContextFromObject( DependencyObject context, DependencyObject oldValue ) { if (context != null && oldValue.InheritanceContext == context) { context.RemoveSelfAsInheritanceContext(oldValue, null); } } //------------------------------------------------------------------- // // AddInheritanceContext // // Implementation to receive a new inheritance context // //-------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void AddInheritanceContext(DependencyObject newInheritanceContext, DependencyObject value, ref bool hasMultipleInheritanceContexts, ref DependencyObject inheritanceContext ) { // ignore the request when the new context is the same as the old, // or when there are already multiple contexts if (newInheritanceContext != inheritanceContext && !hasMultipleInheritanceContexts) { if (inheritanceContext == null || newInheritanceContext == null) { // Pick up the new context inheritanceContext = newInheritanceContext; } else { // We are now being referenced from multiple // places, clear the context hasMultipleInheritanceContexts = true; inheritanceContext = null; } value.OnInheritanceContextChanged(EventArgs.Empty); } } //-------------------------------------------------------------------- // // RemoveInheritanceContext // // Implementation to remove an old inheritance context // //------------------------------------------------------------------- [FriendAccessAllowed] // Built into Base, also used by Framework. internal static void RemoveInheritanceContext(DependencyObject oldInheritanceContext, DependencyObject value, ref bool hasMultipleInheritanceContexts, ref DependencyObject inheritanceContext ) { // ignore the request when the given context doesn't match the old one, // or when there are already multiple contexts if (oldInheritanceContext == inheritanceContext && !hasMultipleInheritanceContexts) { // clear the context inheritanceContext = null; value.OnInheritanceContextChanged(EventArgs.Empty); } } } } // 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
- CommunicationObjectAbortedException.cs
- ContentWrapperAttribute.cs
- DataGridCommandEventArgs.cs
- RowToParametersTransformer.cs
- WasNotInstalledException.cs
- ReadOnlyNameValueCollection.cs
- BinaryEditor.cs
- MemberDescriptor.cs
- ViewPort3D.cs
- __ConsoleStream.cs
- FieldToken.cs
- SqlRecordBuffer.cs
- ControlIdConverter.cs
- ConfigXmlElement.cs
- RandomNumberGenerator.cs
- RemotingConfiguration.cs
- ListenerAdaptersInstallComponent.cs
- SerialStream.cs
- ArrayElementGridEntry.cs
- unitconverter.cs
- BamlBinaryReader.cs
- BuildProvider.cs
- TypeValidationEventArgs.cs
- LogWriteRestartAreaAsyncResult.cs
- PolyBezierSegment.cs
- DbExpressionVisitor_TResultType.cs
- WebPartDescriptionCollection.cs
- SchemaTypeEmitter.cs
- TemplateXamlParser.cs
- TreeChangeInfo.cs
- ReplyChannelAcceptor.cs
- Registry.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- LocationSectionRecord.cs
- TransformerTypeCollection.cs
- Input.cs
- loginstatus.cs
- Enum.cs
- ToolStripItemEventArgs.cs
- PrimitiveType.cs
- DataRowComparer.cs
- QilList.cs
- TabletCollection.cs
- CookieParameter.cs
- UnsafeNetInfoNativeMethods.cs
- ListViewSelectEventArgs.cs
- CollectionViewGroupRoot.cs
- path.cs
- PriorityChain.cs
- ContainerUtilities.cs
- DPAPIProtectedConfigurationProvider.cs
- AttachedPropertyMethodSelector.cs
- StringArrayConverter.cs
- validationstate.cs
- HtmlProps.cs
- QueryActivatableWorkflowsCommand.cs
- CommonObjectSecurity.cs
- DataGridViewUtilities.cs
- StorageBasedPackageProperties.cs
- _LocalDataStore.cs
- TransformerConfigurationWizardBase.cs
- XComponentModel.cs
- ListViewInsertionMark.cs
- ChannelSinkStacks.cs
- LogManagementAsyncResult.cs
- GregorianCalendarHelper.cs
- DeflateEmulationStream.cs
- isolationinterop.cs
- Table.cs
- ProfileProvider.cs
- NavigateEvent.cs
- StructuredTypeInfo.cs
- WebControlParameterProxy.cs
- HtmlEmptyTagControlBuilder.cs
- AvTraceFormat.cs
- NamedPermissionSet.cs
- WebPartExportVerb.cs
- MemoryMappedView.cs
- DatagridviewDisplayedBandsData.cs
- Selection.cs
- NativeWindow.cs
- StagingAreaInputItem.cs
- ResourceReader.cs
- DesignerView.Commands.cs
- MailBnfHelper.cs
- NavigationWindow.cs
- LocalizableResourceBuilder.cs
- XPathItem.cs
- ActivationServices.cs
- ProxyWebPartManagerDesigner.cs
- TransformGroup.cs
- Types.cs
- AppSettingsExpressionEditor.cs
- TextEditorTyping.cs
- MethodRental.cs
- NonBatchDirectoryCompiler.cs
- ConfigurationValue.cs
- DesignerDataColumn.cs
- LinqDataSourceEditData.cs
- XmlBindingWorker.cs