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
- EditorReuseAttribute.cs
- SortableBindingList.cs
- SizeConverter.cs
- Vector3DAnimation.cs
- XAMLParseException.cs
- ConstrainedGroup.cs
- TcpClientCredentialType.cs
- TrackBarDesigner.cs
- ScriptManager.cs
- NonVisualControlAttribute.cs
- RankException.cs
- BrowserCapabilitiesFactoryBase.cs
- XsltCompileContext.cs
- LinearKeyFrames.cs
- sqlcontext.cs
- State.cs
- AsyncResult.cs
- MDIClient.cs
- _NegoStream.cs
- WebPartConnectionsConfigureVerb.cs
- Stack.cs
- IgnoreSectionHandler.cs
- CollectionType.cs
- SecurityIdentifierElementCollection.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- XmlSchemaAttributeGroupRef.cs
- SizeChangedEventArgs.cs
- XPathNavigatorReader.cs
- DSASignatureFormatter.cs
- FlowLayout.cs
- HScrollBar.cs
- UseManagedPresentationBindingElement.cs
- KeySpline.cs
- DbProviderManifest.cs
- EventItfInfo.cs
- ProfileEventArgs.cs
- COM2Enum.cs
- HtmlInputHidden.cs
- ExtendedPropertiesHandler.cs
- HwndTarget.cs
- IgnoreDeviceFilterElementCollection.cs
- GeometryHitTestResult.cs
- PopupControlService.cs
- SqlGatherConsumedAliases.cs
- SetterBaseCollection.cs
- JoinGraph.cs
- DbModificationCommandTree.cs
- GuidTagList.cs
- TabControlEvent.cs
- SqlWorkflowPersistenceService.cs
- DispatcherOperation.cs
- Number.cs
- DataRelation.cs
- BaseProcessor.cs
- XmlSchemaValidator.cs
- DescendantOverDescendantQuery.cs
- SelfIssuedAuthRSACryptoProvider.cs
- ImageMap.cs
- ReferenceSchema.cs
- OrthographicCamera.cs
- SerTrace.cs
- X509Chain.cs
- XmlCDATASection.cs
- OleDbInfoMessageEvent.cs
- ManagementScope.cs
- BulletDecorator.cs
- ByteStreamGeometryContext.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- SubMenuStyleCollection.cs
- AssemblyHash.cs
- XsdDuration.cs
- DynamicQueryableWrapper.cs
- FusionWrap.cs
- PermissionRequestEvidence.cs
- MessageFormatterConverter.cs
- ModelVisual3D.cs
- TabControl.cs
- PageHandlerFactory.cs
- CqlGenerator.cs
- EventListener.cs
- PropertyInformationCollection.cs
- FirewallWrapper.cs
- WebReference.cs
- Attributes.cs
- NetSectionGroup.cs
- ExpressionBindingCollection.cs
- BinaryConverter.cs
- ObjectTag.cs
- PngBitmapEncoder.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- ContextDataSourceContextData.cs
- TextUtf8RawTextWriter.cs
- OdbcConnectionOpen.cs
- Trace.cs
- Invariant.cs
- ComplusTypeValidator.cs
- ArgumentNullException.cs
- DbExpressionVisitor.cs
- ContextToken.cs
- CookieProtection.cs