2012-01-08 11 views
0

私は、ユーザーが何かを描画してデータベースに保存するプロジェクトを進めています。キャンバスの原点の位置を変更する方法

基本的に、ユーザーはキャンバスを描画します。キャンバスは画面サイズの5倍大きく、キャンバスはまだ画面の中央にあります(または画面はキャンバスの中央にあります)。

キャンバスのサイズを柔軟にする(キャンバスのサイズを将来変更したい)ために、キャンバスの中心を原点、つまり(0、0 )がキャンバスの中心にあります。だからマウスがどこかをクリックすると、私が得るポイントはキャンバスの中心に基づいて測定されます。

たぶん、あなたは言うでしょう:

  1. Canvas.RenderTransformOrigin = (.5,.5)。しかし、私は回転中心を求めていないので、それは解決策ではありません。
  2. Canvas.RenderTransform = TranslateTransform (Canvas.Width/2.0, Canvas.Height/2.0)。しかし、キャンバス上のすべてのオブジェクトを中央に移動するだけです。

また、オフセットCanvas.Width/2.0, Canvas.Height/2.0でMouseClickポイントを変換してから、レンダリング時に戻してみてください。これを行うことはできますが、あまりにも多くの努力を払う必要があります。これは、実行する必要のある操作が多いため、前後に翻訳する必要があるたびに実行されます。

答えて

0

あなたはこの問題のほとんどすべての可能なアプローチについて考えているようですが、もう1つ追加することができますか?

要素の位置を決定するLeftおよびTopのプロパティが接続プロパティです。独自の添付プロパティ、OffsetLeftOffsetTopを作成すると、必要な起点に基づいて要素を配置することができます。これらは、実装するのが簡単で、取得/設定されたときに、変更イベントを処理してそれぞれのCanvasプロパティを設定します。

+0

こんにちはコリン、お返事ありがとうございます。私はあなたが提案しているのと同様のアプローチを考えました。つまり、別のキャンバス 'public PeterCanvas:Canvas'を作成し、' OffsetLeft'、 'OffsetTop'(あなたのもの)のような新しいプロパティを追加します。しかし、マウスクリックイベントの座標はTopLeftコーナーに基づいて測定されます(恐らく 'e.GetPosition(HelpCanvas)' 'HelpCanvas'は元のキャンバスの中心にある0サイズのキャンバスです) 。また、RenderTransformビヘイビア(キャンバス上のオブジェクトはこのプロパティが可能です)など多くの作業があります... –

+0

@PeterLee簡単なオプションを探していることはわかっていますが、1つもありません。私は恐れている! – ColinE

関連する問題