Silverlight ベータ 2 アプリを RC0 にアップグレードしており、ポイントを子要素から親要素に変換する機能があります。この関数の目的は、要素が同じキャンバス上になく、親を共有していない場合でも、要素が子の上に正確に表示されるようにすることです。
現在の関数は次のとおりです。
protected Point TranslatePosition(Point current, Panel from, Panel to, MouseEventArgs e)
{
Point rtn = new Point(-1, -1);
// get point relative to existing parent
Point fromPoint = e.GetPosition(from);
// get point relative to new parent
Point toPoint = e.GetPosition(to);
// calculate delta
double deltaX = fromPoint.X - toPoint.X;
double deltaY = fromPoint.Y - toPoint.Y;
// calculate new position
rtn = new Point(current.X - deltaX, current.Y - deltaY);
return rtn;
}
MouseEventArgs.GetPosition 関数に依存して、既存および新しい親に対する相対的な位置を取得していることに注意してください。利用可能な MouseEventArgs がない場合、新しいインスタンスを作成して渡していました。これはハックでしたが、機能しているように見えました。現在、RC0 では、MouseEventArgs コンストラクターが内部であるため、このハックは機能しなくなりました。
MouseEventArgs.GetPosition に依存しない RC0 のポイントの変換を行うメソッドを作成する方法についてのアイデアはありますか?