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