Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / UIElementHelper.cs / 1305600 / UIElementHelper.cs
using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Windows.Input; using System.Windows.Automation.Peers; using MS.Internal.PresentationCore; namespace MS.Internal { internal static class UIElementHelper { [FriendAccessAllowed] internal static bool IsHitTestVisible(DependencyObject o) { Debug.Assert(o != null, "UIElementHelper.IsHitTestVisible called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.IsHitTestVisible; } else { return ((UIElement3D)o).IsHitTestVisible; } } [FriendAccessAllowed] internal static bool IsVisible(DependencyObject o) { Debug.Assert(o != null, "UIElementHelper.IsVisible called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.IsVisible; } else { return ((UIElement3D)o).IsVisible; } } [FriendAccessAllowed] internal static DependencyObject PredictFocus(DependencyObject o, FocusNavigationDirection direction) { Debug.Assert(o != null, "UIElementHelper.PredictFocus called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.PredictFocus(direction); } else { return ((UIElement3D)o).PredictFocus(direction); } } [FriendAccessAllowed] internal static UIElement GetContainingUIElement2D(DependencyObject reference) { UIElement element = null; while (reference != null) { element = reference as UIElement; if (element != null) break; reference = VisualTreeHelper.GetParent(reference); } return element; } [FriendAccessAllowed] internal static DependencyObject GetUIParent(DependencyObject child) { DependencyObject parent = GetUIParent(child, false); return parent; } [FriendAccessAllowed] internal static DependencyObject GetUIParent(DependencyObject child, bool continuePastVisualTree) { DependencyObject parent = null; DependencyObject myParent = null; // Try to find a UIElement parent in the visual ancestry. if (child is Visual) { myParent = ((Visual)child).InternalVisualParent; } else { myParent = ((Visual3D)child).InternalVisualParent; } parent = InputElement.GetContainingUIElement(myParent) as DependencyObject; // If there was no UIElement parent in the visual ancestry, // check along the logical branch. if(parent == null && continuePastVisualTree) { UIElement childAsUIElement = child as UIElement; if (childAsUIElement != null) { parent = InputElement.GetContainingInputElement(childAsUIElement.GetUIParentCore()) as DependencyObject; } else { UIElement3D childAsUIElement3D = child as UIElement3D; if (childAsUIElement3D != null) { parent = InputElement.GetContainingInputElement(childAsUIElement3D.GetUIParentCore()) as DependencyObject; } } } return parent; } [FriendAccessAllowed] internal static bool IsUIElementOrUIElement3D(DependencyObject o) { return (o is UIElement || o is UIElement3D); } [FriendAccessAllowed] internal static bool InvalidateAutomationAncestors(DependencyObject o) { if (o == null) return false; AutomationPeer ap = null; UIElement e = o as UIElement; if (e != null) { if (e.HasAutomationPeer == true) ap = e.GetAutomationPeer(); } else { ContentElement ce = o as ContentElement; if (ce != null) { if (ce.HasAutomationPeer == true) ap = ce.GetAutomationPeer(); } else { UIElement3D e3d = o as UIElement3D; if (e3d != null) { if (e3d.HasAutomationPeer == true) ap = e3d.GetAutomationPeer(); } } } if (ap != null) { ap.InvalidateAncestorsRecursive(); // Check for parent being non-null while stopping as we don't want to stop in between due to peers not connected to AT // those peers sometimes gets created to serve for various patterns. // e.g: ScrollViewAutomationPeer for Scroll Pattern in case of ListBox. if (ap.GetParent() != null) return true; else return false; } // Propagate the value through parent peers in both logical & visual parent chain, // because automation tree contains peers corresponding to subset of the elements from both the trees. DependencyObject coreParent = DeferredElementTreeState.GetInputElementParent(o, null); DependencyObject logicalParent = DeferredElementTreeState.GetLogicalParent(o, null); if (coreParent != null) { if (InvalidateAutomationAncestors(coreParent)) return true; } if (logicalParent != null && logicalParent != coreParent) { if (InvalidateAutomationAncestors(logicalParent)) return true; } return false; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Windows.Input; using System.Windows.Automation.Peers; using MS.Internal.PresentationCore; namespace MS.Internal { internal static class UIElementHelper { [FriendAccessAllowed] internal static bool IsHitTestVisible(DependencyObject o) { Debug.Assert(o != null, "UIElementHelper.IsHitTestVisible called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.IsHitTestVisible; } else { return ((UIElement3D)o).IsHitTestVisible; } } [FriendAccessAllowed] internal static bool IsVisible(DependencyObject o) { Debug.Assert(o != null, "UIElementHelper.IsVisible called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.IsVisible; } else { return ((UIElement3D)o).IsVisible; } } [FriendAccessAllowed] internal static DependencyObject PredictFocus(DependencyObject o, FocusNavigationDirection direction) { Debug.Assert(o != null, "UIElementHelper.PredictFocus called with null argument"); UIElement oAsUIElement = o as UIElement; if (oAsUIElement != null) { return oAsUIElement.PredictFocus(direction); } else { return ((UIElement3D)o).PredictFocus(direction); } } [FriendAccessAllowed] internal static UIElement GetContainingUIElement2D(DependencyObject reference) { UIElement element = null; while (reference != null) { element = reference as UIElement; if (element != null) break; reference = VisualTreeHelper.GetParent(reference); } return element; } [FriendAccessAllowed] internal static DependencyObject GetUIParent(DependencyObject child) { DependencyObject parent = GetUIParent(child, false); return parent; } [FriendAccessAllowed] internal static DependencyObject GetUIParent(DependencyObject child, bool continuePastVisualTree) { DependencyObject parent = null; DependencyObject myParent = null; // Try to find a UIElement parent in the visual ancestry. if (child is Visual) { myParent = ((Visual)child).InternalVisualParent; } else { myParent = ((Visual3D)child).InternalVisualParent; } parent = InputElement.GetContainingUIElement(myParent) as DependencyObject; // If there was no UIElement parent in the visual ancestry, // check along the logical branch. if(parent == null && continuePastVisualTree) { UIElement childAsUIElement = child as UIElement; if (childAsUIElement != null) { parent = InputElement.GetContainingInputElement(childAsUIElement.GetUIParentCore()) as DependencyObject; } else { UIElement3D childAsUIElement3D = child as UIElement3D; if (childAsUIElement3D != null) { parent = InputElement.GetContainingInputElement(childAsUIElement3D.GetUIParentCore()) as DependencyObject; } } } return parent; } [FriendAccessAllowed] internal static bool IsUIElementOrUIElement3D(DependencyObject o) { return (o is UIElement || o is UIElement3D); } [FriendAccessAllowed] internal static bool InvalidateAutomationAncestors(DependencyObject o) { if (o == null) return false; AutomationPeer ap = null; UIElement e = o as UIElement; if (e != null) { if (e.HasAutomationPeer == true) ap = e.GetAutomationPeer(); } else { ContentElement ce = o as ContentElement; if (ce != null) { if (ce.HasAutomationPeer == true) ap = ce.GetAutomationPeer(); } else { UIElement3D e3d = o as UIElement3D; if (e3d != null) { if (e3d.HasAutomationPeer == true) ap = e3d.GetAutomationPeer(); } } } if (ap != null) { ap.InvalidateAncestorsRecursive(); // Check for parent being non-null while stopping as we don't want to stop in between due to peers not connected to AT // those peers sometimes gets created to serve for various patterns. // e.g: ScrollViewAutomationPeer for Scroll Pattern in case of ListBox. if (ap.GetParent() != null) return true; else return false; } // Propagate the value through parent peers in both logical & visual parent chain, // because automation tree contains peers corresponding to subset of the elements from both the trees. DependencyObject coreParent = DeferredElementTreeState.GetInputElementParent(o, null); DependencyObject logicalParent = DeferredElementTreeState.GetLogicalParent(o, null); if (coreParent != null) { if (InvalidateAutomationAncestors(coreParent)) return true; } if (logicalParent != null && logicalParent != coreParent) { if (InvalidateAutomationAncestors(logicalParent)) return true; } return false; } } } // 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
- QueueProcessor.cs
- RequestCacheValidator.cs
- BuildDependencySet.cs
- DataGridViewCellStyleChangedEventArgs.cs
- XmlSchemaImporter.cs
- DataObject.cs
- PhysicalFontFamily.cs
- ReadOnlyCollectionBuilder.cs
- SynchronizedInputPattern.cs
- NotifyParentPropertyAttribute.cs
- ReadOnlyDictionary.cs
- Rotation3DAnimationUsingKeyFrames.cs
- ClickablePoint.cs
- MergeEnumerator.cs
- XmlSchemaComplexType.cs
- SparseMemoryStream.cs
- CombinedGeometry.cs
- MetadataFile.cs
- X509Certificate2.cs
- ErrorWrapper.cs
- ViewBox.cs
- DataPagerFieldCommandEventArgs.cs
- ToolStripComboBox.cs
- XmlSchemaProviderAttribute.cs
- SqlResolver.cs
- IsolatedStorage.cs
- FormatterConverter.cs
- ResourcesChangeInfo.cs
- NetTcpBindingElement.cs
- JournalNavigationScope.cs
- ServiceHttpModule.cs
- HeaderElement.cs
- TrustExchangeException.cs
- ObjectSpanRewriter.cs
- TableDetailsCollection.cs
- BigInt.cs
- ScriptResourceHandler.cs
- HwndProxyElementProvider.cs
- InputScopeConverter.cs
- PngBitmapDecoder.cs
- OrthographicCamera.cs
- HTTPNotFoundHandler.cs
- SmiContextFactory.cs
- XappLauncher.cs
- DataRecordInternal.cs
- PreloadHost.cs
- PropertyManager.cs
- XmlLanguageConverter.cs
- MetadataPropertyCollection.cs
- PageBreakRecord.cs
- CaseKeyBox.xaml.cs
- MetadataItemEmitter.cs
- ScriptControlDescriptor.cs
- Contracts.cs
- CompositionTarget.cs
- CorruptingExceptionCommon.cs
- XmlHierarchicalDataSourceView.cs
- UnsafePeerToPeerMethods.cs
- TreeNodeCollection.cs
- AnimatedTypeHelpers.cs
- TraceHwndHost.cs
- IISMapPath.cs
- ObjRef.cs
- PnrpPeerResolverElement.cs
- ImageSourceValueSerializer.cs
- DirectoryNotFoundException.cs
- AutomationPatternInfo.cs
- ResourceDisplayNameAttribute.cs
- FileDialog.cs
- TypeSystemProvider.cs
- AlignmentXValidation.cs
- ResponseStream.cs
- SymbolMethod.cs
- XmlSchemaSimpleContent.cs
- TagMapInfo.cs
- WebPartEditorApplyVerb.cs
- ToolStripMenuItem.cs
- JavaScriptSerializer.cs
- XmlNodeChangedEventArgs.cs
- OdbcDataReader.cs
- SmiXetterAccessMap.cs
- MobileListItemCollection.cs
- ProjectionNode.cs
- PointCollectionConverter.cs
- CacheManager.cs
- Pkcs7Recipient.cs
- PropertyStore.cs
- InvalidPropValue.cs
- RubberbandSelector.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- SqlConnectionPoolGroupProviderInfo.cs
- WebPartConnection.cs
- DefaultPerformanceCounters.cs
- AccessibilityApplicationManager.cs
- Soap12ProtocolReflector.cs
- Interlocked.cs
- TransformCollection.cs
- HebrewCalendar.cs
- CompilationLock.cs
- PolicyImporterElement.cs