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 / DescendentsWalkerBase.cs / 1 / DescendentsWalkerBase.cs
using System; using System.Collections; using System.Diagnostics; using System.Windows; using System.Windows.Media; using MS.Utility; namespace System.Windows { ////// This is a base class to the DescendentsWalker. It is factored out so that /// FrameworkContextData can store and retrieve it from context local storage /// in a type agnostic manner. /// internal class DescendentsWalkerBase { #region Construction protected DescendentsWalkerBase(TreeWalkPriority priority) { _startNode = null; _priority = priority; _recursionDepth = 0; _nodes = new FrugalStructList(); } #endregion Construction internal bool WasVisited(DependencyObject d) { DependencyObject ancestor = d; while ((ancestor != _startNode) && (ancestor != null)) { DependencyObject logicalParent; if (FrameworkElement.DType.IsInstanceOfType(ancestor)) { FrameworkElement fe = ancestor as FrameworkElement; logicalParent = fe.Parent; // FrameworkElement DependencyObject dependencyObjectParent = VisualTreeHelper.GetParent(fe); if (dependencyObjectParent != null && logicalParent != null && dependencyObjectParent != logicalParent) { return _nodes.Contains(ancestor); } // Follow visual tree if not null otherwise we follow logical tree if (dependencyObjectParent != null) { ancestor = dependencyObjectParent; continue; } } else { // FrameworkContentElement FrameworkContentElement ancestorFCE = ancestor as FrameworkContentElement; logicalParent = (ancestorFCE != null) ? ancestorFCE.Parent : null; } ancestor = logicalParent; } return (ancestor != null); } internal DependencyObject _startNode; internal TreeWalkPriority _priority; internal FrugalStructList _nodes; internal int _recursionDepth; internal const int MAX_TREE_DEPTH = 250; } /// /// Enum specifying whether visual tree needs /// to be travesed first or the logical tree /// internal enum TreeWalkPriority { ////// Traverse Logical Tree first /// LogicalTree, ////// Traverse Visual Tree first /// VisualTree } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections; using System.Diagnostics; using System.Windows; using System.Windows.Media; using MS.Utility; namespace System.Windows { ////// This is a base class to the DescendentsWalker. It is factored out so that /// FrameworkContextData can store and retrieve it from context local storage /// in a type agnostic manner. /// internal class DescendentsWalkerBase { #region Construction protected DescendentsWalkerBase(TreeWalkPriority priority) { _startNode = null; _priority = priority; _recursionDepth = 0; _nodes = new FrugalStructList(); } #endregion Construction internal bool WasVisited(DependencyObject d) { DependencyObject ancestor = d; while ((ancestor != _startNode) && (ancestor != null)) { DependencyObject logicalParent; if (FrameworkElement.DType.IsInstanceOfType(ancestor)) { FrameworkElement fe = ancestor as FrameworkElement; logicalParent = fe.Parent; // FrameworkElement DependencyObject dependencyObjectParent = VisualTreeHelper.GetParent(fe); if (dependencyObjectParent != null && logicalParent != null && dependencyObjectParent != logicalParent) { return _nodes.Contains(ancestor); } // Follow visual tree if not null otherwise we follow logical tree if (dependencyObjectParent != null) { ancestor = dependencyObjectParent; continue; } } else { // FrameworkContentElement FrameworkContentElement ancestorFCE = ancestor as FrameworkContentElement; logicalParent = (ancestorFCE != null) ? ancestorFCE.Parent : null; } ancestor = logicalParent; } return (ancestor != null); } internal DependencyObject _startNode; internal TreeWalkPriority _priority; internal FrugalStructList _nodes; internal int _recursionDepth; internal const int MAX_TREE_DEPTH = 250; } /// /// Enum specifying whether visual tree needs /// to be travesed first or the logical tree /// internal enum TreeWalkPriority { ////// Traverse Logical Tree first /// LogicalTree, ////// Traverse Visual Tree first /// VisualTree } } // 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
- NativeCompoundFileAPIs.cs
- _NetRes.cs
- TriggerCollection.cs
- MessageAction.cs
- TabControl.cs
- RequestStatusBarUpdateEventArgs.cs
- OleDbCommandBuilder.cs
- DataColumnCollection.cs
- SwitchAttribute.cs
- documentsequencetextpointer.cs
- DbConnectionPoolGroup.cs
- SimpleApplicationHost.cs
- StrokeCollection.cs
- SrgsSemanticInterpretationTag.cs
- QilReplaceVisitor.cs
- RelationshipEndCollection.cs
- SqlWriter.cs
- DelegateSerializationHolder.cs
- PageSettings.cs
- Simplifier.cs
- MetadataArtifactLoaderComposite.cs
- ThemeConfigurationDialog.cs
- SystemSounds.cs
- ToolStripContentPanelRenderEventArgs.cs
- XmlSchemaObjectTable.cs
- FormattedText.cs
- Connection.cs
- DurableInstance.cs
- UserMapPath.cs
- ExtensibleClassFactory.cs
- StyleSelector.cs
- RijndaelManagedTransform.cs
- WebSysDefaultValueAttribute.cs
- ModulesEntry.cs
- List.cs
- RSAOAEPKeyExchangeDeformatter.cs
- CurrentChangingEventArgs.cs
- wmiprovider.cs
- SetStateDesigner.cs
- InheritablePropertyChangeInfo.cs
- SlotInfo.cs
- NotConverter.cs
- WSTrustFeb2005.cs
- _LocalDataStore.cs
- DesignParameter.cs
- RelativeSource.cs
- ToolStripItemCollection.cs
- ColorAnimationBase.cs
- GCHandleCookieTable.cs
- StrokeCollectionConverter.cs
- InkSerializer.cs
- RowToParametersTransformer.cs
- FullTextState.cs
- AppliedDeviceFiltersDialog.cs
- PartitionerStatic.cs
- TextServicesCompartmentEventSink.cs
- ProfileModule.cs
- DataGridRowHeaderAutomationPeer.cs
- Trigger.cs
- TextDecorationCollection.cs
- InputElement.cs
- Zone.cs
- TypeRestriction.cs
- DataShape.cs
- PtsCache.cs
- HtmlFormWrapper.cs
- GroupDescription.cs
- ForEachAction.cs
- wmiprovider.cs
- CompiledIdentityConstraint.cs
- FontStretches.cs
- ToolStripRenderer.cs
- MappedMetaModel.cs
- Point.cs
- JsonQNameDataContract.cs
- Rules.cs
- WSHttpSecurityElement.cs
- MatchingStyle.cs
- ScrollItemProviderWrapper.cs
- X500Name.cs
- ObjectToken.cs
- NavigationHelper.cs
- AssociationTypeEmitter.cs
- TemplateBuilder.cs
- CFGGrammar.cs
- TypeName.cs
- X509Chain.cs
- TextModifier.cs
- MetadataArtifactLoaderCompositeResource.cs
- odbcmetadatafactory.cs
- MexHttpsBindingElement.cs
- HtmlUtf8RawTextWriter.cs
- ContractBase.cs
- TerminatorSinks.cs
- MimeMapping.cs
- IPipelineRuntime.cs
- ColumnWidthChangedEvent.cs
- BamlLocalizableResourceKey.cs
- EndpointIdentityExtension.cs
- CodeMemberMethod.cs