XAML ScrollViewer的子项进入视图事件

时间:2019-04-26 07:05:09

标签: xaml uwp uwp-xaml

我有一个ScrollViewer,在顶部区域,有一个视频播放器,在媒体播放器的下面有一个ListView

在上下滚动时,媒体播放器进入视野时,它将开始播放。向下滚动直到媒体播放器消失时,媒体播放器会暂停。

那么,怎么做呢?谢谢。

1 个答案:

答案 0 :(得分:2)

我们可以使用ScrollViewer.ViewChanged事件来了解用户滚动和缩放ScrollViewer。但是ScrollViewer.ViewChanged不会在布局更改时升高。

所以我们可以使用LayoutUpdated事件来完成它。

我们可以从ScrollViewer中获取一些属性,例如Horizo​​ntalOffset和VerticalOffset。

我们可以获得相对于先前控件的控件左上角的坐标。

        var top = control.TransformToVisual(StackPanel).TransformPoint(new Point());

然后我们可以判断用户是否可以通过矩形的交点看到元素。

        var controlBounds = new Rect(top, control.DesiredSize);

        var viewBounds = new Rect(new Point(ScrollViewer.HorizontalOffset, ScrollViewer.VerticalOffset), new Size(ScrollViewer.ViewportWidth, ScrollViewer.ViewportHeight));

        if (RectIntersects(viewBounds, controlBounds))
        {

        }

enter image description here

我们应该编写RectIntersects,检查两个矩形是否相交。

    private static bool RectIntersects(Rect a, Rect b)
    {
        return !(b.Left > a.Right
            || b.Right < a.Left
            || b.Top > a.Bottom
            || b.Bottom < a.Top);
    }