public static IEnumerable <UIElement> ScreenHitTest(Point screenPoint) { #if SILVERLIGHT var uielements = new List <UIElement>(); foreach (var visualRoot in PresentationTreeUtils.EnumerateVisualRoots().OfType <FrameworkElement>()) { uielements.AddRange(VisualTreeHelper.FindElementsInHostCoordinates(screenPoint, visualRoot)); } return(uielements); #else var uielements = new List <UIElement>(); foreach (var visualRoot in PresentationTreeUtils.EnumerateVisualRoots().OfType <FrameworkElement>().Where(fre => fre.Dispatcher.CheckAccess())) { VisualTreeHelper.HitTest(visualRoot, r => { var uie = r as UIElement; if (uie != null) { uielements.Add(uie); } return(HitTestFilterBehavior.Continue); }, result => HitTestResultBehavior.Continue, new PointHitTestParameters(visualRoot.PointFromScreen(screenPoint))); } return(uielements.AsEnumerable().Reverse()); #endif }
public static IEnumerable <UIElement> ScreenHitTest(Rect screenRect) { #if SILVERLIGHT return(VisualTreeHelper.FindElementsInHostCoordinates(screenRect, Application.Current.RootVisual).ToList()); #else var uielements = new List <UIElement>(); foreach (var visualRoot in PresentationTreeUtils.EnumerateVisualRoots().OfType <FrameworkElement>().Where(fre => fre.Dispatcher.CheckAccess())) { if (visualRoot.Dispatcher.CheckAccess() == false) { continue; } VisualTreeHelper.HitTest(visualRoot, r => { var uie = r as UIElement; if (uie != null) { uielements.Add(uie); } return(HitTestFilterBehavior.Continue); }, result => HitTestResultBehavior.Continue, new GeometryHitTestParameters(new RectangleGeometry(visualRoot.TransformRectToClient(screenRect)))); } return(uielements.AsEnumerable().Reverse()); #endif }
public override DependencyObject GetAncestor(DependencyObject dependencyObject) { if (dependencyObject == null) { return(null); } if (_disconnectedTree) { var disconnectedParent = PresentationTreeUtils.GetDisconnectedParent(dependencyObject); if (disconnectedParent != null) { return(disconnectedParent); } } return(_firstStrategy.GetAncestor(dependencyObject) ?? _secondStrategy.GetAncestor(dependencyObject)); }
public override DependencyObject GetAncestor(DependencyObject dependencyObject) { return(PresentationTreeUtils.GetLogicalParent(dependencyObject)); }