Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / TreeChangeInfo.cs / 1 / TreeChangeInfo.cs
//---------------------------------------------------------------------------- // // File: TreeChangeInfo.cs // // Description: // This data-structure is used // 1. As the data that is passed around by the DescendentsWalker // during an AncestorChanged tree-walk. // // Copyright (C) by Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Media; using System.Windows.Controls; using System.Windows.Documents; using MS.Internal; using MS.Utility; namespace System.Windows { ////// This is the data that is passed through the DescendentsWalker /// during an AncestorChange tree-walk. /// internal struct TreeChangeInfo { #region Properties public TreeChangeInfo(DependencyObject root, DependencyObject parent, bool isAddOperation) { _rootOfChange = root; _isAddOperation = isAddOperation; _topmostCollapsedParentNode = null; _rootInheritableValues = null; _inheritablePropertiesStack = null; _valueIndexer = 0; // Create the InheritableProperties cache for the parent // and push it to start the stack ... we don't need to // pop this when we're done because we'll be throing the // stack away at that point. InheritablePropertiesStack.Push(CreateParentInheritableProperties(root, parent, isAddOperation)); } // // This method // 1. Is called from AncestorChange InvalidateTree. // 2. It is used to create the InheritableProperties on the given node. // 3. It also accumulates oldValues for the inheritable properties that are about to be invalidated // internal FrugalObjectListCreateParentInheritableProperties( DependencyObject d, DependencyObject parent, bool isAddOperation) { Debug.Assert(d != null, "Must have non-null current node"); if (parent == null) { return new FrugalObjectList (0); } DependencyObjectType treeObjDOT = d.DependencyObjectType; // See if we have a cached value. EffectiveValueEntry[] parentEffectiveValues = null; uint parentEffectiveValuesCount = 0; uint inheritablePropertiesCount = 0; // If inheritable properties aren't cached on you then use the effective // values cache on the parent to discover those inherited properties that // may need to be invalidated on the children nodes. if (!parent.IsSelfInheritanceParent) { DependencyObject inheritanceParent = parent.InheritanceParent; if (inheritanceParent != null) { parentEffectiveValues = inheritanceParent.EffectiveValues; parentEffectiveValuesCount = inheritanceParent.EffectiveValuesCount; inheritablePropertiesCount = inheritanceParent.InheritableEffectiveValuesCount; } } else { parentEffectiveValues = parent.EffectiveValues; parentEffectiveValuesCount = parent.EffectiveValuesCount; inheritablePropertiesCount = parent.InheritableEffectiveValuesCount; } FrugalObjectList inheritableProperties = new FrugalObjectList ((int) inheritablePropertiesCount); if (inheritablePropertiesCount == 0) { return inheritableProperties; } _rootInheritableValues = new InheritablePropertyChangeInfo[(int) inheritablePropertiesCount]; int inheritableIndex = 0; FrameworkObject foParent = new FrameworkObject(parent); for (uint i=0; i /// This is a stack that is used during an AncestorChange operation. /// I holds the InheritableProperties cache on the parent nodes in /// the tree in the order of traversal. The top of the stack holds /// the cache for the immediate parent node. /// internal Stack > InheritablePropertiesStack { get { if (_inheritablePropertiesStack == null) { _inheritablePropertiesStack = new Stack >(1); } return _inheritablePropertiesStack; } } /// /// When we enter a Visibility=Collapsed subtree, we remember that node /// using this property. As we process the children of this collapsed /// node, we see this property as non-null and know we're collapsed. /// As we exit the subtree, this reference is nulled out which means /// we don't know whether we're in a collapsed tree and the optimizations /// based on Visibility=Collapsed are not valid and should not be used. /// internal object TopmostCollapsedParentNode { get { return _topmostCollapsedParentNode; } set { _topmostCollapsedParentNode = value; } } // Indicates if this is a add child tree operation internal bool IsAddOperation { get { return _isAddOperation; } } // This is the element at the root of the sub-tree that had a parent change. internal DependencyObject Root { get { return _rootOfChange; } } #endregion Properties #region Data private Stack> _inheritablePropertiesStack; private object _topmostCollapsedParentNode; private bool _isAddOperation; private DependencyObject _rootOfChange; private InheritablePropertyChangeInfo[] _rootInheritableValues; private int _valueIndexer; #endregion Data } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // File: TreeChangeInfo.cs // // Description: // This data-structure is used // 1. As the data that is passed around by the DescendentsWalker // during an AncestorChanged tree-walk. // // Copyright (C) by Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Media; using System.Windows.Controls; using System.Windows.Documents; using MS.Internal; using MS.Utility; namespace System.Windows { /// /// This is the data that is passed through the DescendentsWalker /// during an AncestorChange tree-walk. /// internal struct TreeChangeInfo { #region Properties public TreeChangeInfo(DependencyObject root, DependencyObject parent, bool isAddOperation) { _rootOfChange = root; _isAddOperation = isAddOperation; _topmostCollapsedParentNode = null; _rootInheritableValues = null; _inheritablePropertiesStack = null; _valueIndexer = 0; // Create the InheritableProperties cache for the parent // and push it to start the stack ... we don't need to // pop this when we're done because we'll be throing the // stack away at that point. InheritablePropertiesStack.Push(CreateParentInheritableProperties(root, parent, isAddOperation)); } // // This method // 1. Is called from AncestorChange InvalidateTree. // 2. It is used to create the InheritableProperties on the given node. // 3. It also accumulates oldValues for the inheritable properties that are about to be invalidated // internal FrugalObjectListCreateParentInheritableProperties( DependencyObject d, DependencyObject parent, bool isAddOperation) { Debug.Assert(d != null, "Must have non-null current node"); if (parent == null) { return new FrugalObjectList (0); } DependencyObjectType treeObjDOT = d.DependencyObjectType; // See if we have a cached value. EffectiveValueEntry[] parentEffectiveValues = null; uint parentEffectiveValuesCount = 0; uint inheritablePropertiesCount = 0; // If inheritable properties aren't cached on you then use the effective // values cache on the parent to discover those inherited properties that // may need to be invalidated on the children nodes. if (!parent.IsSelfInheritanceParent) { DependencyObject inheritanceParent = parent.InheritanceParent; if (inheritanceParent != null) { parentEffectiveValues = inheritanceParent.EffectiveValues; parentEffectiveValuesCount = inheritanceParent.EffectiveValuesCount; inheritablePropertiesCount = inheritanceParent.InheritableEffectiveValuesCount; } } else { parentEffectiveValues = parent.EffectiveValues; parentEffectiveValuesCount = parent.EffectiveValuesCount; inheritablePropertiesCount = parent.InheritableEffectiveValuesCount; } FrugalObjectList inheritableProperties = new FrugalObjectList ((int) inheritablePropertiesCount); if (inheritablePropertiesCount == 0) { return inheritableProperties; } _rootInheritableValues = new InheritablePropertyChangeInfo[(int) inheritablePropertiesCount]; int inheritableIndex = 0; FrameworkObject foParent = new FrameworkObject(parent); for (uint i=0; i /// This is a stack that is used during an AncestorChange operation. /// I holds the InheritableProperties cache on the parent nodes in /// the tree in the order of traversal. The top of the stack holds /// the cache for the immediate parent node. /// internal Stack > InheritablePropertiesStack { get { if (_inheritablePropertiesStack == null) { _inheritablePropertiesStack = new Stack >(1); } return _inheritablePropertiesStack; } } /// /// When we enter a Visibility=Collapsed subtree, we remember that node /// using this property. As we process the children of this collapsed /// node, we see this property as non-null and know we're collapsed. /// As we exit the subtree, this reference is nulled out which means /// we don't know whether we're in a collapsed tree and the optimizations /// based on Visibility=Collapsed are not valid and should not be used. /// internal object TopmostCollapsedParentNode { get { return _topmostCollapsedParentNode; } set { _topmostCollapsedParentNode = value; } } // Indicates if this is a add child tree operation internal bool IsAddOperation { get { return _isAddOperation; } } // This is the element at the root of the sub-tree that had a parent change. internal DependencyObject Root { get { return _rootOfChange; } } #endregion Properties #region Data private Stack> _inheritablePropertiesStack; private object _topmostCollapsedParentNode; private bool _isAddOperation; private DependencyObject _rootOfChange; private InheritablePropertyChangeInfo[] _rootInheritableValues; private int _valueIndexer; #endregion Data } } // 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
- XPathConvert.cs
- FontFaceLayoutInfo.cs
- RelationshipManager.cs
- WebPartHelpVerb.cs
- PublisherIdentityPermission.cs
- SizeF.cs
- IdnMapping.cs
- ErrorTolerantObjectWriter.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- X509ChainPolicy.cs
- RectangleGeometry.cs
- ArraySegment.cs
- IIS7WorkerRequest.cs
- DataPagerField.cs
- EmptyEnumerable.cs
- AnimatedTypeHelpers.cs
- FollowerQueueCreator.cs
- SqlLiftWhereClauses.cs
- ListItem.cs
- XmlSerializerSection.cs
- InputBuffer.cs
- ApplicationInfo.cs
- InheritanceService.cs
- ScrollViewer.cs
- SymLanguageVendor.cs
- DocumentationServerProtocol.cs
- PolyBezierSegment.cs
- RequiredFieldValidator.cs
- XmlSignatureProperties.cs
- PKCS1MaskGenerationMethod.cs
- SqlWorkflowInstanceStore.cs
- InstallerTypeAttribute.cs
- WebPartDeleteVerb.cs
- DataGridColumnReorderingEventArgs.cs
- ReaderContextStackData.cs
- initElementDictionary.cs
- XPathEmptyIterator.cs
- LambdaCompiler.Expressions.cs
- BindingOperations.cs
- StrongNameMembershipCondition.cs
- PageFunction.cs
- KeyTimeConverter.cs
- WebPartAddingEventArgs.cs
- SafeNativeMemoryHandle.cs
- SafeRightsManagementQueryHandle.cs
- Decoder.cs
- CodeNamespaceCollection.cs
- SqlNamer.cs
- RelativeSource.cs
- XmlSerializerAssemblyAttribute.cs
- PackagingUtilities.cs
- StreamInfo.cs
- PageBuildProvider.cs
- DataSourceNameHandler.cs
- ObjectListCommandsPage.cs
- TransformValueSerializer.cs
- GridSplitterAutomationPeer.cs
- SkewTransform.cs
- ThrowHelper.cs
- SqlDelegatedTransaction.cs
- _NetRes.cs
- EntityWithChangeTrackerStrategy.cs
- Module.cs
- GenericIdentity.cs
- ActivityDesigner.cs
- ToolStripManager.cs
- XmlCharType.cs
- PolicyManager.cs
- ISO2022Encoding.cs
- ToolboxComponentsCreatingEventArgs.cs
- HtmlHead.cs
- SqlProfileProvider.cs
- ByeMessage11.cs
- XslCompiledTransform.cs
- TextBreakpoint.cs
- InteropDesigner.xaml.cs
- EventLogPropertySelector.cs
- SafeThemeHandle.cs
- Object.cs
- UriTemplateDispatchFormatter.cs
- WorkflowMessageEventArgs.cs
- ValueConversionAttribute.cs
- FontResourceCache.cs
- DifferencingCollection.cs
- HttpAsyncResult.cs
- MenuItemStyleCollection.cs
- RegexBoyerMoore.cs
- Table.cs
- Enumerable.cs
- QuaternionAnimationBase.cs
- PersonalizationStateQuery.cs
- SimpleTypeResolver.cs
- TextTreeDeleteContentUndoUnit.cs
- ByteStorage.cs
- basevalidator.cs
- DataServiceRequestOfT.cs
- DelegateBodyWriter.cs
- HealthMonitoringSection.cs
- AvtEvent.cs
- FormatException.cs