Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / DeferredElementTreeState.cs / 1305600 / DeferredElementTreeState.cs
using System.Windows;
using System.Collections.Generic;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Media3D;
namespace MS.Internal
{
internal class DeferredElementTreeState
{
public void SetCoreParent(DependencyObject element, DependencyObject parent)
{
if(!_oldCoreParents.ContainsKey(element))
{
_oldCoreParents[element] = parent;
}
}
public static DependencyObject GetCoreParent(DependencyObject element, DeferredElementTreeState treeState)
{
DependencyObject parent = null;
if(treeState != null && treeState._oldCoreParents.ContainsKey(element))
{
parent = treeState._oldCoreParents[element];
}
else
{
Visual v = element as Visual;
if(v != null)
{
parent = VisualTreeHelper.GetParent(v);
}
else
{
ContentElement ce = element as ContentElement;
if(ce != null)
{
parent = ContentOperations.GetParent(ce);
}
else
{
Visual3D v3D = element as Visual3D;
if (v3D != null)
{
parent = VisualTreeHelper.GetParent(v3D);
}
}
}
}
return parent;
}
public static DependencyObject GetInputElementParent(DependencyObject element, DeferredElementTreeState treeState)
{
DependencyObject parent = element;
while (true)
{
parent = GetCoreParent(parent, treeState);
if (parent == null || InputElement.IsValid(parent))
{
break;
}
}
return parent;
}
public void SetLogicalParent(DependencyObject element, DependencyObject parent)
{
if(!_oldLogicalParents.ContainsKey(element))
{
_oldLogicalParents[element] = parent;
}
}
public static DependencyObject GetLogicalParent(DependencyObject element, DeferredElementTreeState treeState)
{
DependencyObject parent = null;
if(treeState != null && treeState._oldLogicalParents.ContainsKey(element))
{
parent = treeState._oldLogicalParents[element];
}
else
{
UIElement e = element as UIElement;
if(e != null)
{
parent = e.GetUIParentCore(); // Overriden by FrameworkElement.
}
ContentElement ce = element as ContentElement;
if(ce != null)
{
parent = ce.GetUIParentCore(); // Overriden by FrameworkContentElement.
}
}
return parent;
}
public void Clear()
{
_oldCoreParents.Clear();
_oldLogicalParents.Clear();
}
public bool IsEmpty
{
get
{
return _oldCoreParents.Count == 0 && _oldLogicalParents.Count == 0;
}
}
private Dictionary _oldCoreParents = new Dictionary();
private Dictionary _oldLogicalParents = new Dictionary();
}
}
// 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
- ipaddressinformationcollection.cs
- ThreadStartException.cs
- FixedTextBuilder.cs
- CompositeScriptReference.cs
- _ContextAwareResult.cs
- NetworkInterface.cs
- EdmItemError.cs
- InheritanceAttribute.cs
- TextEndOfLine.cs
- ToolZone.cs
- InputEventArgs.cs
- OleDragDropHandler.cs
- Pair.cs
- PriorityBindingExpression.cs
- IgnorePropertiesAttribute.cs
- ServiceCredentials.cs
- TextServicesLoader.cs
- TextAutomationPeer.cs
- SerTrace.cs
- WindowsHyperlink.cs
- XXXOnTypeBuilderInstantiation.cs
- ComponentResourceKeyConverter.cs
- PositiveTimeSpanValidatorAttribute.cs
- ItemCollection.cs
- TextMarkerSource.cs
- BamlLocalizableResourceKey.cs
- SecurityTokenParameters.cs
- ELinqQueryState.cs
- UrlPath.cs
- FontSizeConverter.cs
- PrintControllerWithStatusDialog.cs
- BypassElementCollection.cs
- ModelVisual3D.cs
- CodeAccessPermission.cs
- ConditionalAttribute.cs
- GPStream.cs
- SecurityManager.cs
- DataGridViewColumnConverter.cs
- OptionUsage.cs
- SerialPort.cs
- ScriptManagerProxy.cs
- HostingPreferredMapPath.cs
- FormDesigner.cs
- ChannelSinkStacks.cs
- WpfSharedBamlSchemaContext.cs
- AutomationElementIdentifiers.cs
- UriSection.cs
- HandleRef.cs
- ProxyWebPart.cs
- WsatServiceAddress.cs
- Matrix3D.cs
- DataListGeneralPage.cs
- MediaPlayer.cs
- ToolStripDropDownItemDesigner.cs
- TCPListener.cs
- ProgressBarAutomationPeer.cs
- CharacterHit.cs
- PeerCollaborationPermission.cs
- HtmlInputCheckBox.cs
- DataGridClipboardHelper.cs
- DBConnectionString.cs
- RepeatButton.cs
- TextBoxDesigner.cs
- FrugalList.cs
- MessageLogTraceRecord.cs
- ToolboxItemSnapLineBehavior.cs
- Encoder.cs
- EncodingDataItem.cs
- TagMapInfo.cs
- GridViewColumn.cs
- Permission.cs
- SystemIcons.cs
- GrammarBuilderWildcard.cs
- SHA256Managed.cs
- TypeDescriptionProviderAttribute.cs
- PropertyDescriptorCollection.cs
- XXXOnTypeBuilderInstantiation.cs
- InternalRelationshipCollection.cs
- Content.cs
- ContractBase.cs
- ListControl.cs
- SqlGenerator.cs
- TableDetailsCollection.cs
- SimpleHandlerBuildProvider.cs
- ReachDocumentSequenceSerializer.cs
- comcontractssection.cs
- CodeArrayCreateExpression.cs
- DocumentationServerProtocol.cs
- PaginationProgressEventArgs.cs
- CodeFieldReferenceExpression.cs
- MruCache.cs
- EntitySetBaseCollection.cs
- NamespaceList.cs
- PageContent.cs
- ValidationService.cs
- PeerResolverBindingElement.cs
- EnvelopedPkcs7.cs
- _IPv4Address.cs
- WrappingXamlSchemaContext.cs
- SqlNotificationRequest.cs