我的应用程序中有一个滚动查看器,其中包含一个画布,其中我有一个树自定义绘制的树结构。我正在尝试获取画布中特定节点元素相对于滚动查看器的位置(因此我可以滚动到它),但我的尝试不起作用。
我试过使用marker.TranslatePoint(new Point(0, 0), scrollViewer)
(marker
画布中的元素在哪里),但这只是返回画布的位置,而不是标记。同样,如果我尝试marker.TranslatePoint(new Point(0, 0), layoutCanvas)
,无论标记实际在哪里,我总是会得到(0,0)
结果。
这是我的代码:
var marker = m_Metadata[node].Marker;
var location = marker.TranslatePoint(new Point(0, 0), scrollViewer); // This inorrectly gives the position of the canvas, rather than the marker.
var size = new Size(marker.Width, marker.Height);
var markerArea = new Rect(location, size);
double horizontalOffset = (markerArea.Right + markerArea.Left - scrollViewer.ViewportWidth) / 2;
double verticalOffset = (markerArea.Bottom + markerArea.Top - scrollViewer.ViewportHeight) / 2;
我也尝试过使用marker.TransformToVisual(scrollViewer).Transform(new Point(0, 0)
,但这给出了相同的结果。
Canvas.GetLeft
我可以通过使用, et al来解决它Canvas.GetTop
,但这很混乱且令人费解(因为它们并不总是左对齐和上对齐)。
我该如何解决这个问题,或者它只是不适用于画布?