public Rect MakeVisible(UIElement visual, Rect rectangle) { if (visual is FrameworkElement fe) { var scrollRect = new Rect( _occludedRectPadding.Left, _occludedRectPadding.Top, ActualWidth - _occludedRectPadding.Right, ActualHeight - _occludedRectPadding.Bottom ); var visualPoint = UIElement.TransformToVisual(visual, null).TransformPoint(new Point()); var visualRect = new Rect(visualPoint, new Size(fe.ActualWidth, fe.ActualHeight)); var deltaX = Math.Min(visualRect.Left - scrollRect.Left, Math.Max(0, visualRect.Right - scrollRect.Right)); var deltaY = Math.Min(visualRect.Top - scrollRect.Top, Math.Max(0, visualRect.Bottom - scrollRect.Bottom)); NativePanel.SmoothScrollBy(ViewHelper.LogicalToPhysicalPixels(deltaX), ViewHelper.LogicalToPhysicalPixels(deltaY)); } return(rectangle); }