Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / DescendentsWalkerBase.cs / 1305600 / 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;
}
///
/// 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
- OletxCommittableTransaction.cs
- MappingItemCollection.cs
- ColorConverter.cs
- RtfToXamlReader.cs
- LogLogRecord.cs
- TagNameToTypeMapper.cs
- PropertyGridEditorPart.cs
- XmlNamespaceManager.cs
- cache.cs
- EditorZone.cs
- ReadOnlyHierarchicalDataSourceView.cs
- HtmlDocument.cs
- ModelItemKeyValuePair.cs
- MessageBuffer.cs
- HttpInputStream.cs
- Geometry3D.cs
- ClientProxyGenerator.cs
- HtmlHead.cs
- BufferAllocator.cs
- RegistryPermission.cs
- elementinformation.cs
- WindowsStreamSecurityBindingElement.cs
- XhtmlBasicTextViewAdapter.cs
- RectangleGeometry.cs
- TreeViewDataItemAutomationPeer.cs
- IteratorFilter.cs
- TcpClientChannel.cs
- ScriptRef.cs
- CapiSafeHandles.cs
- RuleConditionDialog.Designer.cs
- MaxSessionCountExceededException.cs
- TextRenderer.cs
- TdsParser.cs
- LayoutTable.cs
- MembershipSection.cs
- BitmapPalette.cs
- InputProcessorProfilesLoader.cs
- PeerCredential.cs
- GeometryDrawing.cs
- Utils.cs
- PageBreakRecord.cs
- SecurityChannel.cs
- ModelUIElement3D.cs
- WebServiceErrorEvent.cs
- Inline.cs
- AnnotationStore.cs
- ReferenceTypeElement.cs
- relpropertyhelper.cs
- UpDownBase.cs
- HotSpotCollection.cs
- CellIdBoolean.cs
- DragDrop.cs
- AuthorizationSection.cs
- DataDesignUtil.cs
- SelectionProcessor.cs
- SqlCrossApplyToCrossJoin.cs
- _Connection.cs
- NonParentingControl.cs
- ControlPaint.cs
- SelectionRange.cs
- AudioFormatConverter.cs
- DefaultDiscoveryServiceExtension.cs
- NamespaceList.cs
- DictionaryEntry.cs
- DesignTimeParseData.cs
- AssociatedControlConverter.cs
- ButtonBaseAdapter.cs
- WindowsSecurityToken.cs
- ApplicationTrust.cs
- CodePageUtils.cs
- UnsafeNativeMethods.cs
- glyphs.cs
- UnknownBitmapEncoder.cs
- Style.cs
- EdmSchemaAttribute.cs
- FrameworkContextData.cs
- mediaeventshelper.cs
- SessionStateSection.cs
- MouseButtonEventArgs.cs
- SqlProviderServices.cs
- SqlGatherConsumedAliases.cs
- ConvertEvent.cs
- DocumentOrderQuery.cs
- LongValidator.cs
- InputScopeNameConverter.cs
- Point3DAnimationUsingKeyFrames.cs
- DataGridViewCellCancelEventArgs.cs
- TimeManager.cs
- ExtentKey.cs
- WebPartConnectionsConnectVerb.cs
- Brushes.cs
- TransformGroup.cs
- KeyTime.cs
- RuleConditionDialog.Designer.cs
- ClientFormsIdentity.cs
- PropertyNames.cs
- EventLogPermissionAttribute.cs
- CalendarAutoFormat.cs
- DataPagerFieldCommandEventArgs.cs
- AccessDataSourceView.cs