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
- DivideByZeroException.cs
- ExeContext.cs
- UnauthorizedAccessException.cs
- CollectionView.cs
- DataGridViewLinkCell.cs
- NumberFormatInfo.cs
- PropertyItem.cs
- _TransmitFileOverlappedAsyncResult.cs
- IteratorDescriptor.cs
- WeakReadOnlyCollection.cs
- NGCPageContentSerializerAsync.cs
- UmAlQuraCalendar.cs
- CompositeCollection.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- LineProperties.cs
- DataGridViewImageColumn.cs
- xsdvalidator.cs
- IndexerNameAttribute.cs
- CommonDialog.cs
- FragmentQueryKB.cs
- Point3DAnimation.cs
- SamlAuthenticationClaimResource.cs
- MDIWindowDialog.cs
- _NegoState.cs
- NavigationPropertyEmitter.cs
- BindStream.cs
- _BasicClient.cs
- DataGridCell.cs
- TextSerializer.cs
- DesignerMetadata.cs
- Compiler.cs
- ComponentGlyph.cs
- LocationSectionRecord.cs
- UIInitializationException.cs
- ActivityInterfaces.cs
- VisualTreeUtils.cs
- CTreeGenerator.cs
- EventPropertyMap.cs
- HyperLinkColumn.cs
- BaseParaClient.cs
- BrowserCapabilitiesFactory.cs
- SqlConnectionFactory.cs
- Events.cs
- WebPartEditorCancelVerb.cs
- FlagsAttribute.cs
- BitmapCacheBrush.cs
- EncoderReplacementFallback.cs
- Misc.cs
- TcpClientSocketManager.cs
- Set.cs
- TextServicesCompartmentEventSink.cs
- PointCollectionConverter.cs
- FieldNameLookup.cs
- HttpFileCollection.cs
- XamlParser.cs
- ValidationHelpers.cs
- Stylus.cs
- NamespaceQuery.cs
- DiffuseMaterial.cs
- SinglePhaseEnlistment.cs
- DropTarget.cs
- XmlNotation.cs
- ProfileGroupSettings.cs
- GPPOINT.cs
- InvokeMemberBinder.cs
- SqlDataSourceEnumerator.cs
- XPathPatternBuilder.cs
- StructuralCache.cs
- _AutoWebProxyScriptWrapper.cs
- PeerTransportElement.cs
- OracleConnectionStringBuilder.cs
- updateconfighost.cs
- StateDesigner.TransitionInfo.cs
- ConcurrentBag.cs
- UIPermission.cs
- ButtonBaseAdapter.cs
- HoistedLocals.cs
- SqlNotificationRequest.cs
- OrElse.cs
- TextTreeUndoUnit.cs
- RemotingConfigParser.cs
- ImageCodecInfoPrivate.cs
- MeasureData.cs
- FaultDescriptionCollection.cs
- XmlNamedNodeMap.cs
- RenderData.cs
- PropertyGridEditorPart.cs
- ValidationSummary.cs
- RuleProcessor.cs
- NotificationContext.cs
- HttpValueCollection.cs
- DoubleIndependentAnimationStorage.cs
- ToolStripItem.cs
- TypeCollectionPropertyEditor.cs
- RandomDelaySendsAsyncResult.cs
- WebPartConnectionsConfigureVerb.cs
- WhiteSpaceTrimStringConverter.cs
- WebPartActionVerb.cs
- JumpTask.cs
- BaseAppDomainProtocolHandler.cs