Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / System / Windows / FrameworkContextData.cs / 1 / FrameworkContextData.cs
using System.Windows.Threading; using MS.Utility; using System; using System.Collections.Generic; using System.Diagnostics; namespace System.Windows { internal class FrameworkContextData { public static FrameworkContextData From(Dispatcher context) { FrameworkContextData data = (FrameworkContextData)context.Reserved2; if (data == null) { data = new FrameworkContextData(); context.Reserved2 = data; } return data; } // Enforce never creating except via static constructor above. private FrameworkContextData() { } // // Property Invalidation of Inheritable Properties // // At the context level, we need to keep track of all inheritable property invalidations currently // in action. The reason that there can be multiple invalidations going on at the same time is because // an invalidation of one property can cause an invalidation of a different property. The result is that // the first invalidation *pauses* while the second invalidation is delivered to the tree. // // We keep track of these invalidations to be able to optimize a recursion of the same property // invalidation from an element to that element's children. FrameworkElement.InvalidateTree will // check the stack of walkers here and, if it finds a match, will conclude that a new DescendentsWalker // need not be spun up. And there was much rejoicing. // public void AddWalker(object data, DescendentsWalkerBase walker) { // push a new walker on the top of the stack WalkerEntry walkerEntry = new WalkerEntry(); walkerEntry.Data = data; walkerEntry.Walker = walker; _currentWalkers.Add(walkerEntry); } public void RemoveWalker(object data, DescendentsWalkerBase walker) { // pop the walker off the top of the stack int last = _currentWalkers.Count - 1; #if DEBUG WalkerEntry walkerEntry = _currentWalkers[last]; Debug.Assert((walkerEntry.Data == data) && (walkerEntry.Walker == walker), "Inheritance DescendentsWalker tracker removal failed"); #endif _currentWalkers.RemoveAt(last); } public bool WasNodeVisited(DependencyObject d, object data) { // check to see if the given property on the given object is going to be visited by the // DescendentsWalker on the top of the stack if (_currentWalkers.Count > 0) { int last = _currentWalkers.Count - 1; WalkerEntry walkerEntry = _currentWalkers[last]; if (walkerEntry.Data == data) { return walkerEntry.Walker.WasVisited(d); } } return false; } private struct WalkerEntry { public object Data; // either the inheritable DP being invalidated, or the AncestorChangedDelegate, or the ResourceChangedDelegate public DescendentsWalkerBase Walker; } private List_currentWalkers = new List (4); } } // 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
- HostingEnvironmentSection.cs
- JoinElimination.cs
- CodeCommentStatementCollection.cs
- ExpressionBindingsDialog.cs
- OutArgumentConverter.cs
- ProtectedProviderSettings.cs
- ConcatQueryOperator.cs
- EntityException.cs
- StickyNote.cs
- SmtpNetworkElement.cs
- CustomValidator.cs
- ViewStateModeByIdAttribute.cs
- ExpressionBuilderCollection.cs
- AttachedAnnotationChangedEventArgs.cs
- MeshGeometry3D.cs
- Memoizer.cs
- XmlParserContext.cs
- ChangeBlockUndoRecord.cs
- XXXOnTypeBuilderInstantiation.cs
- TextSerializer.cs
- baseaxisquery.cs
- EdgeProfileValidation.cs
- EntityTypeEmitter.cs
- IsolatedStorageSecurityState.cs
- DispatcherProcessingDisabled.cs
- RegionIterator.cs
- InvalidTimeZoneException.cs
- ArgumentOutOfRangeException.cs
- PathGeometry.cs
- CollectionExtensions.cs
- KnownTypesProvider.cs
- CodeIdentifiers.cs
- CheckPair.cs
- EntitySetBase.cs
- RawStylusInput.cs
- HandleValueEditor.cs
- DataGridViewTextBoxColumn.cs
- StyleSelector.cs
- basenumberconverter.cs
- TextView.cs
- DependencyObject.cs
- DLinqDataModelProvider.cs
- NumericExpr.cs
- Hashtable.cs
- TypeDescriptionProvider.cs
- ForwardPositionQuery.cs
- InProcStateClientManager.cs
- XmlUnspecifiedAttribute.cs
- ConnectionManagementSection.cs
- Vector3dCollection.cs
- HttpsChannelFactory.cs
- BitConverter.cs
- BitmapCodecInfoInternal.cs
- DeferredSelectedIndexReference.cs
- ListControlConvertEventArgs.cs
- GPRECT.cs
- Logging.cs
- DoubleAnimation.cs
- RegionData.cs
- ReachPageContentSerializerAsync.cs
- WindowsStartMenu.cs
- ServiceCredentialsSecurityTokenManager.cs
- FileNotFoundException.cs
- TableAdapterManagerNameHandler.cs
- EntityClassGenerator.cs
- Matrix3D.cs
- SearchForVirtualItemEventArgs.cs
- Stroke.cs
- SqlDependencyUtils.cs
- BuildResult.cs
- Propagator.JoinPropagator.cs
- TextServicesLoader.cs
- GridEntry.cs
- WithParamAction.cs
- RankException.cs
- SpellCheck.cs
- InvalidPrinterException.cs
- RegexMatchCollection.cs
- PathFigureCollection.cs
- DataGridViewToolTip.cs
- DispatcherOperation.cs
- HierarchicalDataBoundControl.cs
- ThreadPool.cs
- MachineSettingsSection.cs
- IpcManager.cs
- PropertyInformationCollection.cs
- StretchValidation.cs
- OleDbCommand.cs
- COM2PictureConverter.cs
- TypeDescriptor.cs
- SHA384Managed.cs
- SettingsContext.cs
- ContextMenuAutomationPeer.cs
- HierarchicalDataBoundControlAdapter.cs
- HitTestDrawingContextWalker.cs
- querybuilder.cs
- HitTestResult.cs
- PKCS1MaskGenerationMethod.cs
- Comparer.cs
- EDesignUtil.cs