我在我的应用的滚动浏览器包含一个画布,在其中我有一个树自定义绘制的树结构。 我试图让相对滚动浏览器(这样我就可以滚动它)画布中的特定节点元素的位置,但我尝试不工作。
我已经尝试使用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
, Canvas.GetTop
等人,但是这是混乱和令人费解的(因为他们不会永远是左,顶部对齐)。
我怎样才能解决这个问题呢,还是只是不适合画布工作?