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, VisitedCallbackpreCallback, 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, VisitedCallbackpreCallback, 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
- ChoiceConverter.cs
- CompilerTypeWithParams.cs
- XmlBinaryReader.cs
- ParameterElement.cs
- OleDbPermission.cs
- DynamicActivityXamlReader.cs
- InvokeFunc.cs
- LowerCaseStringConverter.cs
- HtmlInputHidden.cs
- ThrowHelper.cs
- RowUpdatingEventArgs.cs
- NamedPipeDuplicateContext.cs
- HtmlInputReset.cs
- SerialPort.cs
- SqlProcedureAttribute.cs
- ScrollContentPresenter.cs
- XmlSortKey.cs
- MatrixTransform3D.cs
- StyleSheet.cs
- AnnotationObservableCollection.cs
- CommunicationObject.cs
- TextEditorParagraphs.cs
- SafeFindHandle.cs
- LinearGradientBrush.cs
- AutomationIdentifierGuids.cs
- HighlightVisual.cs
- ReliableMessagingHelpers.cs
- SetUserPreferenceRequest.cs
- OleDbInfoMessageEvent.cs
- Exceptions.cs
- MenuItemBinding.cs
- SqlAliasesReferenced.cs
- DataServiceHostFactory.cs
- BlockUIContainer.cs
- MexTcpBindingCollectionElement.cs
- MobileTemplatedControlDesigner.cs
- RegexWriter.cs
- BindingMemberInfo.cs
- WeakReferenceEnumerator.cs
- WebPartConnectionsConnectVerb.cs
- DecoderReplacementFallback.cs
- CryptoApi.cs
- DragStartedEventArgs.cs
- ParsedAttributeCollection.cs
- ValidationSummary.cs
- XmlSchemaSimpleTypeList.cs
- RelOps.cs
- StrongNameHelpers.cs
- HttpConfigurationContext.cs
- TreeView.cs
- JsonWriterDelegator.cs
- OpCellTreeNode.cs
- Matrix.cs
- Highlights.cs
- CalendarDataBindingHandler.cs
- EdmItemCollection.OcAssemblyCache.cs
- Baml2006KeyRecord.cs
- Tablet.cs
- ButtonColumn.cs
- XmlTextReaderImplHelpers.cs
- WpfXamlType.cs
- WeakReferenceList.cs
- HotSpot.cs
- SamlConstants.cs
- Stroke2.cs
- SecurityPermission.cs
- UserControl.cs
- EntityDataSourceUtil.cs
- DataService.cs
- _UncName.cs
- FrameworkElementFactoryMarkupObject.cs
- ManipulationCompletedEventArgs.cs
- XmlEncodedRawTextWriter.cs
- ProtectedUri.cs
- AppDomainProtocolHandler.cs
- PingOptions.cs
- XmlSignatureManifest.cs
- CodeComment.cs
- CommandPlan.cs
- ConnectionStringsExpressionBuilder.cs
- WindowsGraphics.cs
- XmlAttributeCollection.cs
- MachineKeySection.cs
- ColumnMapProcessor.cs
- AmbientLight.cs
- NativeMethods.cs
- RNGCryptoServiceProvider.cs
- VisualTreeHelper.cs
- AutoResetEvent.cs
- Speller.cs
- AnnotationMap.cs
- DataContext.cs
- PeerNameResolver.cs
- ComponentRenameEvent.cs
- ButtonBaseAdapter.cs
- IdentityHolder.cs
- Delegate.cs
- ButtonColumn.cs
- RayMeshGeometry3DHitTestResult.cs
- HostingEnvironmentException.cs