0

xamlページに次のようなものがあります:

<ScrollViewer x:Name="PreviewvideosScrollViewer" HorizontalScrollBarVisibility="Auto" Width="1366" Height="480" VerticalScrollBarVisibility="Disabled">
            <Canvas x:Name="VideoCanvas" HorizontalAlignment="Left">
            </Canvas>
</ScrollViewer>

コードでは、キャンバスに多くのコントロールを追加しましたが、それらの多くはウィンドウの外にあります。これらのコントロールのどれが表示されているか (ユーザーが画面に表示されているか)、どれが表示されていないかを判断するにはどうすればよいですか?

次のようなサンプルコードを試しました:

private bool IsUserVisible(FrameworkElement element)
    {
        if (!element.Parent.Equals(VideoCanvas))
            return true;
        //// position of your visual inside the scrollviewer    
        GeneralTransform childTransform = element.TransformToAncestor(VideoCanvas);
        Rect rectangle = childTransform.TransformBounds(new Rect(new Point(0, 0), element.RenderSize));

        ////Check if the elements Rect intersects with that of the scrollviewer's
        Rect result = Rect.Intersect(new Rect(new Point(0, 0), VideoCanvas.RenderSize), rectangle);
        ////if result is Empty then the element is not in view
        return result != Rect.Empty;
    }

またはこれ:

private bool IsUserVisible(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.TopLeft) || rect.Contains(bounds.BottomRight);
    }

しかし、どちらも機能していません。どこに問題があるのでしょうか? スクロールビューアでキャンバスを使用していますか? または、他の何か?ありがとう

4

1 に答える 1