Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- StatusCommandUI.cs
- GridViewRowCollection.cs
- TypeLoader.cs
- ZoneButton.cs
- ErrorHandler.cs
- HttpCookieCollection.cs
- Message.cs
- DefaultBinder.cs
- TimeSpanFormat.cs
- XmlPreloadedResolver.cs
- DBNull.cs
- HostingEnvironmentSection.cs
- EntityDataSourceValidationException.cs
- ComponentCollection.cs
- CfgParser.cs
- SequentialOutput.cs
- ConfigurationValue.cs
- SettingsPropertyValue.cs
- ConnectionPoolManager.cs
- BrowserDefinition.cs
- RelativeSource.cs
- TypeResolvingOptionsAttribute.cs
- XamlTypeMapper.cs
- DispatcherHooks.cs
- CatalogPartChrome.cs
- PeerIPHelper.cs
- ToolStripContainerDesigner.cs
- ViewLoader.cs
- TaiwanCalendar.cs
- XPathScanner.cs
- EventBuilder.cs
- CdpEqualityComparer.cs
- HuffModule.cs
- __FastResourceComparer.cs
- ModuleBuilderData.cs
- ScriptServiceAttribute.cs
- DesignOnlyAttribute.cs
- ToolConsole.cs
- VisemeEventArgs.cs
- MimeObjectFactory.cs
- SmiEventSink_Default.cs
- xmlNames.cs
- ScrollContentPresenter.cs
- ObjectDataSource.cs
- Line.cs
- ServiceContractViewControl.cs
- TreeNodeBindingDepthConverter.cs
- MetadataExchangeClient.cs
- GorillaCodec.cs
- EventSchemaTraceListener.cs
- SafeFileHandle.cs
- ObjectDataSourceStatusEventArgs.cs
- AssemblyInfo.cs
- SimpleColumnProvider.cs
- SiteMapNodeCollection.cs
- dataprotectionpermission.cs
- PermissionRequestEvidence.cs
- ObjectDataProvider.cs
- SectionVisual.cs
- TabletDeviceInfo.cs
- NetTcpSecurity.cs
- ScalarConstant.cs
- HtmlTableCell.cs
- EventLogPermission.cs
- CodeGroup.cs
- TextRunTypographyProperties.cs
- SetterBase.cs
- ConfigXmlSignificantWhitespace.cs
- TableCellCollection.cs
- PathGeometry.cs
- XmlDomTextWriter.cs
- XmlDictionaryReader.cs
- BamlTreeNode.cs
- WebPartTracker.cs
- PropertyPushdownHelper.cs
- NavigationHelper.cs
- TargetInvocationException.cs
- SimpleExpression.cs
- XmlNullResolver.cs
- Point.cs
- BasicBrowserDialog.designer.cs
- SafeFileMapViewHandle.cs
- ParentQuery.cs
- BufferBuilder.cs
- StringInfo.cs
- FtpRequestCacheValidator.cs
- SoapTypeAttribute.cs
- HttpValueCollection.cs
- InstanceData.cs
- ParsedAttributeCollection.cs
- XXXInfos.cs
- Command.cs
- ListBoxItem.cs
- DesignTimeVisibleAttribute.cs
- Attributes.cs
- Queue.cs
- SafeProcessHandle.cs
- ComponentConverter.cs
- ArraySubsetEnumerator.cs
- FlowPosition.cs