0

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 のポイントの変換を行うメソッドを作成する方法についてのアイデアはありますか?

4

2 に答える 2

2

フレームワーク要素の TransformToVisual メソッドを参照してください。別のコントロールを指定すると、現在のコントロールを基準とした点の座標を、渡されたコントロールを基準とした座標にマップする新しい変換を生成します。

var transform = from.TransformToVisual(to);
return transform.Transform(current);
于 2008-09-30T17:39:05.470 に答える
0

それでも...レンダリング変換パイプラインが更新を受け入れる方法に問題があるようです。これは、WPF での動作とは異なります。

私はdaisley-harrison.comに wiki エントリを作成し、これについて話しています。後で気が向いたら、 blog.daisley-harrison.comのブログ エントリに変更します。

于 2009-02-08T08:40:27.013 に答える