Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / PrePostDescendentsWalker.cs / 1305600 / 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
- TextTreeTextBlock.cs
- ToolStripOverflow.cs
- DataGridPageChangedEventArgs.cs
- ConditionChanges.cs
- ArgumentValidation.cs
- FontConverter.cs
- base64Transforms.cs
- COAUTHIDENTITY.cs
- FigureParaClient.cs
- Peer.cs
- MappedMetaModel.cs
- COM2ExtendedBrowsingHandler.cs
- CodeCastExpression.cs
- safelink.cs
- RuntimeConfigurationRecord.cs
- Rule.cs
- SqlDataSourceStatusEventArgs.cs
- RoutingConfiguration.cs
- CodeArrayIndexerExpression.cs
- GenericRootAutomationPeer.cs
- AuthenticationException.cs
- NullableConverter.cs
- CodeObject.cs
- TrustManagerPromptUI.cs
- TreeViewItemAutomationPeer.cs
- ConstructorNeedsTagAttribute.cs
- RadioButtonBaseAdapter.cs
- ExpandCollapseProviderWrapper.cs
- PageThemeParser.cs
- TreeWalker.cs
- ToolStripSystemRenderer.cs
- Bitmap.cs
- TextDecorationCollection.cs
- URI.cs
- MemberDescriptor.cs
- XhtmlStyleClass.cs
- TraceLevelHelper.cs
- EntitySqlQueryState.cs
- DocumentPage.cs
- KeyManager.cs
- DataGridViewSelectedRowCollection.cs
- SortQuery.cs
- QueryAccessibilityHelpEvent.cs
- ContextStack.cs
- safelinkcollection.cs
- DragDrop.cs
- ToolStripContentPanel.cs
- NullRuntimeConfig.cs
- __Filters.cs
- TreeViewBindingsEditor.cs
- MatrixKeyFrameCollection.cs
- DesignerTransaction.cs
- SafeNativeMethods.cs
- MailDefinition.cs
- SHA1CryptoServiceProvider.cs
- AlphaSortedEnumConverter.cs
- RoleManagerModule.cs
- HtmlWindow.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- AutomationPatternInfo.cs
- CodeMemberField.cs
- X509ChainPolicy.cs
- WebControlAdapter.cs
- WorkflowMarkupSerializer.cs
- StickyNoteHelper.cs
- GenericEnumConverter.cs
- Substitution.cs
- Scripts.cs
- MetadataHelper.cs
- CapacityStreamGeometryContext.cs
- UInt32Storage.cs
- ObjectTypeMapping.cs
- GlobalizationAssembly.cs
- XmlSequenceWriter.cs
- ExtensionWindowResizeGrip.cs
- XmlUnspecifiedAttribute.cs
- PointConverter.cs
- ResourceDisplayNameAttribute.cs
- DiagnosticTrace.cs
- ASCIIEncoding.cs
- StreamingContext.cs
- XXXOnTypeBuilderInstantiation.cs
- GorillaCodec.cs
- CodeGeneratorOptions.cs
- ContentAlignmentEditor.cs
- RowTypeElement.cs
- WebPartManager.cs
- Effect.cs
- XmlSerializerFaultFormatter.cs
- DigestComparer.cs
- EntityViewGenerationAttribute.cs
- Optimizer.cs
- ResourceLoader.cs
- LabelEditEvent.cs
- WindowClosedEventArgs.cs
- OracleBinary.cs
- DependencyPropertyValueSerializer.cs
- DefaultSection.cs
- OracleTransaction.cs
- StringSource.cs