キャンバスを含むアプリケーションにスクロール ビューアーがあり、その中にツリーのカスタム描画ツリー構造があります。スクロール ビューアに相対的なキャンバス内の特定のノード要素の位置を取得しようとしています (スクロールできるように) が、うまくいきません。
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
が、これは面倒で複雑です (常に左揃えと上揃えになるとは限らないため)。
どうすればこれを修正できますか、それともキャンバスでは機能しませんか?