TokenEditorPresenter FindNearestPresenter(Point p) { var panel = LayoutTreeHelper.GetVisualChildren(AssociatedObject).OfType <TokenEditorPanel>().FirstOrDefault(); if (panel?.Children == null) { return(null); } var distance = double.MaxValue; TokenEditorPresenter presenter = null; for (int i = 0; i < panel.Children.Count; i++) { var child = panel.Children[i] as TokenEditorPresenter; if (child.IsNewTokenEditorPresenter) { continue; } var bounds = child.TransformToVisual(AssociatedObject).TransformBounds(new Rect(child.RenderSize)); var center = new Point(bounds.X + bounds.Width / 2.0, bounds.Y + bounds.Height / 2.0); var length = (center - p).LengthSquared; if (distance > length) { distance = length; presenter = child; } } return(presenter); }
void AddAdorner(TokenEditorPresenter tokenEditorPresenter, Position position) { RemoveAdorner(); var adornerLayer = AdornerLayer.GetAdornerLayer(tokenEditorPresenter); adornerLayer.Add(new PositionAdorner(tokenEditorPresenter, position)); adornedElement = tokenEditorPresenter; }