Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- HttpSessionStateBase.cs
- NameValuePair.cs
- XmlSchemaComplexContent.cs
- DesignerVerbToolStripMenuItem.cs
- WebAdminConfigurationHelper.cs
- TextTreeInsertUndoUnit.cs
- DataGridViewComboBoxEditingControl.cs
- TableLayout.cs
- EventSourceCreationData.cs
- EventLogLink.cs
- Attributes.cs
- XmlCountingReader.cs
- StsCommunicationException.cs
- SymmetricAlgorithm.cs
- EmbossBitmapEffect.cs
- RepeaterDesigner.cs
- Sql8ConformanceChecker.cs
- DataTableMappingCollection.cs
- CustomErrorsSection.cs
- EntityDataSourceViewSchema.cs
- WindowsSpinner.cs
- DbMetaDataFactory.cs
- ObservableCollection.cs
- XPathDocumentBuilder.cs
- OuterGlowBitmapEffect.cs
- IPAddress.cs
- Tag.cs
- GradientStopCollection.cs
- BindingGroup.cs
- ConfigurationElementProperty.cs
- ScaleTransform.cs
- DbConnectionOptions.cs
- LoadGrammarCompletedEventArgs.cs
- CodeTypeConstructor.cs
- HTTPRemotingHandler.cs
- Button.cs
- SapiRecognizer.cs
- WebBrowserBase.cs
- SystemColors.cs
- FixedDocumentSequencePaginator.cs
- SecurityRuntime.cs
- PathData.cs
- XmlSchemaSimpleTypeList.cs
- DbExpressionVisitor_TResultType.cs
- ToolBarButtonDesigner.cs
- FixedSOMTableCell.cs
- ListViewItemSelectionChangedEvent.cs
- SqlXml.cs
- RepeatBehaviorConverter.cs
- XmlConvert.cs
- ImageButton.cs
- Thread.cs
- CatalogUtil.cs
- BadImageFormatException.cs
- MemoryPressure.cs
- MissingMemberException.cs
- ModuleBuilderData.cs
- SystemColors.cs
- SEHException.cs
- BufferBuilder.cs
- TypeConverters.cs
- HostProtectionPermission.cs
- MappingItemCollection.cs
- FileClassifier.cs
- RawMouseInputReport.cs
- PreservationFileReader.cs
- IISMapPath.cs
- CompositeTypefaceMetrics.cs
- HttpCookie.cs
- LiteralLink.cs
- AxisAngleRotation3D.cs
- GridLengthConverter.cs
- ActivityInstanceReference.cs
- TreeViewEvent.cs
- Pool.cs
- KnowledgeBase.cs
- BasicDesignerLoader.cs
- Misc.cs
- ScriptComponentDescriptor.cs
- WebAdminConfigurationHelper.cs
- WindowsAuthenticationModule.cs
- ColumnResult.cs
- CfgParser.cs
- UnmanagedBitmapWrapper.cs
- BCryptHashAlgorithm.cs
- FastEncoderWindow.cs
- RuntimeEnvironment.cs
- DynamicPropertyHolder.cs
- RtfToXamlReader.cs
- ToolBarTray.cs
- StringOutput.cs
- ExceptionUtil.cs
- HashCodeCombiner.cs
- PrimaryKeyTypeConverter.cs
- InputLangChangeRequestEvent.cs
- WebScriptMetadataInstanceContextProvider.cs
- BinaryParser.cs
- Dump.cs
- ColorConvertedBitmapExtension.cs
- BaseInfoTable.cs