Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / PrePostDescendentsWalker.cs / 1 / PrePostDescendentsWalker.cs
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// A simple subclass of DescendentsWalker which introduces a second callback
// which is called after a node's children have been visited.
//
// History:
// 04/13/2004: rruiz: Introduces class.
// 10/20/2004: rruiz: Moved class to MS.Internal.
//
//-----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using MS.Utility;
namespace MS.Internal
{
///
/// A simple subclass of DescendentsWalker which introduces a second callback
/// which is called after a node's children have been visited.
///
internal class PrePostDescendentsWalker : DescendentsWalker
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Creates an instances of PrePostDescendentsWalker.
///
/// specifies which tree should be visited first
/// the callback to be called before a node's children are visited
/// the callback to be called after a node's children are visited
/// the data passed to each callback
public PrePostDescendentsWalker(TreeWalkPriority priority, VisitedCallback preCallback, VisitedCallback postCallback, T data) :
base(priority, preCallback, data)
{
_postCallback = postCallback;
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// Starts the walking process for the given node.
///
/// the node to start the walk on
/// whether or not the first node should have the callbacks called on it
public override void StartWalk(DependencyObject startNode, bool skipStartNode)
{
try
{
base.StartWalk(startNode, skipStartNode);
}
finally
{
if (!skipStartNode)
{
if (_postCallback != null)
{
// This type checking is done in DescendentsWalker. Doing it here
// keeps us consistent.
if (FrameworkElement.DType.IsInstanceOfType(startNode) || FrameworkContentElement.DType.IsInstanceOfType(startNode))
{
_postCallback(startNode, this.Data);
}
}
}
}
}
#endregion Public Methods
//------------------------------------------------------
//
// Protected Methods
//
//------------------------------------------------------
#region Protected Methods
///
/// This method is called for every node touched during a walking of
/// the tree. Some nodes may not have this called if the preCallback
/// returns false - thereby preventing its subtree from being visited.
///
/// the node to visit
protected override void _VisitNode(DependencyObject d)
{
try
{
base._VisitNode(d);
}
finally
{
if (_postCallback != null)
{
_postCallback(d, this.Data);
}
}
}
#endregion Protected Methods
//-----------------------------------------------------
//
// Private Properties
//
//------------------------------------------------------
#region Private Properties
private VisitedCallback _postCallback;
#endregion Private Properties
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// A simple subclass of DescendentsWalker which introduces a second callback
// which is called after a node's children have been visited.
//
// History:
// 04/13/2004: rruiz: Introduces class.
// 10/20/2004: rruiz: Moved class to MS.Internal.
//
//-----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using MS.Utility;
namespace MS.Internal
{
///
/// A simple subclass of DescendentsWalker which introduces a second callback
/// which is called after a node's children have been visited.
///
internal class PrePostDescendentsWalker : DescendentsWalker
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Creates an instances of PrePostDescendentsWalker.
///
/// specifies which tree should be visited first
/// the callback to be called before a node's children are visited
/// the callback to be called after a node's children are visited
/// the data passed to each callback
public PrePostDescendentsWalker(TreeWalkPriority priority, VisitedCallback preCallback, VisitedCallback postCallback, T data) :
base(priority, preCallback, data)
{
_postCallback = postCallback;
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// Starts the walking process for the given node.
///
/// the node to start the walk on
/// whether or not the first node should have the callbacks called on it
public override void StartWalk(DependencyObject startNode, bool skipStartNode)
{
try
{
base.StartWalk(startNode, skipStartNode);
}
finally
{
if (!skipStartNode)
{
if (_postCallback != null)
{
// This type checking is done in DescendentsWalker. Doing it here
// keeps us consistent.
if (FrameworkElement.DType.IsInstanceOfType(startNode) || FrameworkContentElement.DType.IsInstanceOfType(startNode))
{
_postCallback(startNode, this.Data);
}
}
}
}
}
#endregion Public Methods
//------------------------------------------------------
//
// Protected Methods
//
//------------------------------------------------------
#region Protected Methods
///
/// This method is called for every node touched during a walking of
/// the tree. Some nodes may not have this called if the preCallback
/// returns false - thereby preventing its subtree from being visited.
///
/// the node to visit
protected override void _VisitNode(DependencyObject d)
{
try
{
base._VisitNode(d);
}
finally
{
if (_postCallback != null)
{
_postCallback(d, this.Data);
}
}
}
#endregion Protected Methods
//-----------------------------------------------------
//
// Private Properties
//
//------------------------------------------------------
#region Private Properties
private VisitedCallback _postCallback;
#endregion Private Properties
}
}
// 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
- XpsDocument.cs
- CaseInsensitiveOrdinalStringComparer.cs
- RootAction.cs
- Splitter.cs
- AddInControllerImpl.cs
- ManipulationInertiaStartingEventArgs.cs
- SafeBitVector32.cs
- DataGridViewCell.cs
- VerificationAttribute.cs
- TraversalRequest.cs
- CDSsyncETWBCLProvider.cs
- OleDbInfoMessageEvent.cs
- InputLangChangeRequestEvent.cs
- ErrorWebPart.cs
- SqlCrossApplyToCrossJoin.cs
- RuntimeConfig.cs
- ObjectToken.cs
- SmiSettersStream.cs
- MouseButton.cs
- StackBuilderSink.cs
- DialogResultConverter.cs
- LongValidatorAttribute.cs
- GridItemProviderWrapper.cs
- MenuItemStyleCollection.cs
- EnumValidator.cs
- QueryStringParameter.cs
- DataPagerFieldCommandEventArgs.cs
- TraceContextEventArgs.cs
- RtfControlWordInfo.cs
- GlyphCache.cs
- Activator.cs
- SelectionService.cs
- Types.cs
- RegexRunner.cs
- MediaContextNotificationWindow.cs
- AppDomainEvidenceFactory.cs
- TrackPointCollection.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- OpenFileDialog.cs
- GridLength.cs
- SoapEnumAttribute.cs
- VariantWrapper.cs
- StringResourceManager.cs
- NegationPusher.cs
- WebPartConnectionsConnectVerb.cs
- UnionCodeGroup.cs
- ServiceKnownTypeAttribute.cs
- DbParameterHelper.cs
- SystemSounds.cs
- BezierSegment.cs
- ConfigurationManagerHelperFactory.cs
- SizeAnimationBase.cs
- AssemblyBuilderData.cs
- ReservationCollection.cs
- StrongName.cs
- ImageCollectionEditor.cs
- PagedDataSource.cs
- DocumentPageTextView.cs
- ViewUtilities.cs
- CodeTypeReference.cs
- EnumBuilder.cs
- BitmapEffectGroup.cs
- DesignerResources.cs
- PersistenceTypeAttribute.cs
- BaseValidator.cs
- UnsafeNativeMethodsPenimc.cs
- HealthMonitoringSection.cs
- ShapingEngine.cs
- PagedDataSource.cs
- WebPartPersonalization.cs
- CrossContextChannel.cs
- CodeVariableDeclarationStatement.cs
- HttpRequest.cs
- ReservationNotFoundException.cs
- SelectingProviderEventArgs.cs
- TextTreeNode.cs
- ApplicationDirectoryMembershipCondition.cs
- CodeThrowExceptionStatement.cs
- StaticExtension.cs
- PackageDigitalSignatureManager.cs
- ProcessManager.cs
- GroupItem.cs
- ProfileSettings.cs
- BaseTreeIterator.cs
- CommonXSendMessage.cs
- RSACryptoServiceProvider.cs
- BitmapCacheBrush.cs
- SaveFileDialog.cs
- UriExt.cs
- PerformanceCounterPermissionEntry.cs
- SignedInfo.cs
- InputScope.cs
- DataAdapter.cs
- TextDecoration.cs
- SiteMapNode.cs
- CounterCreationDataCollection.cs
- DbConnectionStringCommon.cs
- FindCriteriaApril2005.cs
- DocumentScope.cs
- ToolStripDropDownItem.cs