Я создал метод расширения, который проверяет, является ли элемент полностью видимым внутри контейнера:
public static bool IsUserVisible(this FrameworkElement element, FrameworkElement container)
{
if (!element.IsVisible)
return false;
var bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
var rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds);
}
В вашем случае вы можете попробовать использовать что-то вроде этого:
myUserControl.IsUserVisible(scrollViewerWithMyCanvas);