Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / FrameworkContextData.cs / 1305600 / 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
- HitTestParameters3D.cs
- BindingValueChangedEventArgs.cs
- DomainLiteralReader.cs
- DbConnectionHelper.cs
- SerializationInfoEnumerator.cs
- InfoCardConstants.cs
- CompositeFontInfo.cs
- XmlUtilWriter.cs
- PropertyReferenceExtension.cs
- QueryTask.cs
- DES.cs
- TextTreeUndo.cs
- SiteMapNode.cs
- ArraySet.cs
- DataListItemCollection.cs
- UiaCoreApi.cs
- UpdatePanelTriggerCollection.cs
- ManagedWndProcTracker.cs
- WindowsProgressbar.cs
- WorkflowNamespace.cs
- CommandConverter.cs
- IconConverter.cs
- SettingsPropertyNotFoundException.cs
- Menu.cs
- ToolStripButton.cs
- CompoundFileStorageReference.cs
- InputLanguageCollection.cs
- Scheduling.cs
- SqlDependencyUtils.cs
- ReadingWritingEntityEventArgs.cs
- WebHeaderCollection.cs
- PropertyChangingEventArgs.cs
- WebBrowserContainer.cs
- Helper.cs
- SqlDataAdapter.cs
- CompilationLock.cs
- BaseContextMenu.cs
- ApplicationContext.cs
- CompressedStack.cs
- DeferredElementTreeState.cs
- Animatable.cs
- Privilege.cs
- WindowsFormsHelpers.cs
- BitmapSource.cs
- SHA256Managed.cs
- FontEditor.cs
- PropertyGridCommands.cs
- PageContentCollection.cs
- SerializationHelper.cs
- FormsAuthenticationTicket.cs
- SourceCollection.cs
- WebPartEditorCancelVerb.cs
- UpdateExpressionVisitor.cs
- ObjectTag.cs
- TextPatternIdentifiers.cs
- LinkedResourceCollection.cs
- ObjectQuery.cs
- IgnoreFileBuildProvider.cs
- ViewManager.cs
- ValidationUtility.cs
- StreamedWorkflowDefinitionContext.cs
- DBParameter.cs
- XmlChildNodes.cs
- GPPOINT.cs
- DynamicDiscoveryDocument.cs
- DataViewSetting.cs
- Quad.cs
- CurrentChangingEventManager.cs
- MultiDataTrigger.cs
- Geometry.cs
- HttpBrowserCapabilitiesBase.cs
- TextTreeDeleteContentUndoUnit.cs
- UrlMappingCollection.cs
- ExpressionTextBox.xaml.cs
- CompositeActivityValidator.cs
- ControlValuePropertyAttribute.cs
- WebRequestModuleElement.cs
- EUCJPEncoding.cs
- SqlConnectionHelper.cs
- DetailsViewModeEventArgs.cs
- ItemContainerGenerator.cs
- ToolStripDropDownItem.cs
- ThemeDirectoryCompiler.cs
- ValueCollectionParameterReader.cs
- BinHexEncoding.cs
- EntityConnectionStringBuilder.cs
- TextRenderer.cs
- CompModSwitches.cs
- CodeDomSerializerBase.cs
- StringArrayConverter.cs
- ConcatQueryOperator.cs
- ListViewItemSelectionChangedEvent.cs
- WebServiceAttribute.cs
- ValueOfAction.cs
- OracleConnection.cs
- SqlDelegatedTransaction.cs
- ImportCatalogPart.cs
- SslStream.cs
- RuntimeHelpers.cs
- StatusBarItemAutomationPeer.cs