Code:
/ 4.0 / 4.0 / 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.
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
- PageTheme.cs
- WebHttpBindingCollectionElement.cs
- Italic.cs
- ObjectIDGenerator.cs
- PersonalizationAdministration.cs
- Configuration.cs
- XmlnsCompatibleWithAttribute.cs
- RelatedView.cs
- TrackingMemoryStream.cs
- HttpCookie.cs
- ThrowOnMultipleAssignment.cs
- WsatServiceAddress.cs
- XmlHierarchyData.cs
- WebPartConnectionsCancelVerb.cs
- WebPartCloseVerb.cs
- sitestring.cs
- HttpModulesSection.cs
- InkCanvasAutomationPeer.cs
- AuthenticatedStream.cs
- FixedTextSelectionProcessor.cs
- BindingList.cs
- BrowserCapabilitiesCompiler.cs
- ContentPropertyAttribute.cs
- AnnotationHighlightLayer.cs
- ProvideValueServiceProvider.cs
- ConsoleKeyInfo.cs
- NavigatingCancelEventArgs.cs
- XsdValidatingReader.cs
- Socket.cs
- COM2TypeInfoProcessor.cs
- NullableDoubleMinMaxAggregationOperator.cs
- Clock.cs
- DragDrop.cs
- WindowsGraphics2.cs
- ToolStripMenuItem.cs
- XslAst.cs
- SafeNativeMethods.cs
- WebPartTracker.cs
- EditingMode.cs
- ResourceProperty.cs
- HttpStreamFormatter.cs
- TextCharacters.cs
- NonSerializedAttribute.cs
- ObjectParameter.cs
- OutKeywords.cs
- DelegatingChannelListener.cs
- Authorization.cs
- ModelItemExtensions.cs
- ProfileBuildProvider.cs
- OleDbConnectionFactory.cs
- ToolTipAutomationPeer.cs
- DataFormats.cs
- MemoryStream.cs
- EdmTypeAttribute.cs
- CommandBinding.cs
- ProfileBuildProvider.cs
- Journal.cs
- ServiceEndpointAssociationProvider.cs
- ObjectConverter.cs
- ContainerFilterService.cs
- Context.cs
- OdbcCommandBuilder.cs
- _HelperAsyncResults.cs
- List.cs
- EntityDataSourceContextCreatingEventArgs.cs
- SymbolPair.cs
- UnsafeNativeMethods.cs
- AsyncOperation.cs
- SqlInternalConnectionTds.cs
- SvcMapFile.cs
- UnmanagedMemoryStream.cs
- ProcessHostMapPath.cs
- QuadraticEase.cs
- ProcessModelSection.cs
- ModelVisual3D.cs
- FileDialog.cs
- XsltQilFactory.cs
- ListBoxItem.cs
- arclist.cs
- LocalizationComments.cs
- WinFormsComponentEditor.cs
- PartBasedPackageProperties.cs
- LocatorGroup.cs
- DbConnectionPool.cs
- StickyNoteHelper.cs
- securitymgrsite.cs
- BufferedReadStream.cs
- IssuedTokenClientElement.cs
- RevocationPoint.cs
- RetrieveVirtualItemEventArgs.cs
- ColumnHeaderConverter.cs
- XsltOutput.cs
- TextSearch.cs
- SslStream.cs
- Pens.cs
- WebPartManagerDesigner.cs
- MimeReturn.cs
- ImportContext.cs
- Attributes.cs
- EntityCodeGenerator.cs