現在,WPFを使用してタブレット上でタッチ操作可能なマップのようなものを作成しています.
開発環境は c#, Visual studio2013です.
以前までは以下の図のように直接Canvas上にコントロールをAddすることでコントロールの座標を取得(Canvas.GetLeft(Control)/Canvas.GetTop(Control))し,矢印部分の座標を取得していました.なお,コントロールはタッチ操作(ドラッグ&ドロップ等)可能で,ドラッグすると矢印も付いてきます.
しかし,諸事情により以下のように同じジャンルのコントロールをひとまとめにしたものを作ることになりました.
理想のインタフェースは以下の画像のとおりです.
黄緑の部分は,ノードをきれいに並べたいがために,Gridの上にWrapPanelをしいたコントロールを作成し,使用しています.
(Gridを使用しているのは,黄色のコントロールを2分割にしているためです)
黄緑で囲われた部分をドラッグすると,2つのコントロールがまとめて動くような形にしたいです.
しかし,Canvas上にGrid-WrapPanelを置き,その上に更にコントロールを置くことで,矢印の座標がうまくとれなくなりました.もちろんCanvasの間にGrid-WrapPanelを入れたことが原因なのはわかっておりますが…
・コントロール群をまとめて動かす
・矢印をコントロール毎に引く
ということができればWrapPanelを利用しなくても構いません.
なお,パネル毎に矢印を引くというのは,このプログラムの利用文脈と異なるのでできればしたくないです.
文章がわかりにくくてすみません.
ご教授お願いいたします.
==追記==
ご指摘ありがとうございます.
座標は以下のように取得しています
- Canvas/Controlの時
Point startPoint = this.TranslatePoint(new Point(0, 0), this.grid1); //始点
Point endPoint = this.TranslatePoint(new Point(0, 0), this.grid1); //終点
//コントロールをキャンバスにセット
Canvas.SetLeft(Control1, 100);
Canvas.SetTop(Control1, 100);
Canvas.SetLeft(Control2, 200);
Canvas.SetTop(Control2, 200); //座標は適当です
//矢印の始点・終点のセット
startPoint.X = Canvas.GetLeft(Control1);
startPoint.Y = Canvas.GetTop(Control1);
endPoint.X = Canvas.GetLeft(Control2);
endPoint.Y = Canvas.GetTop(Control2);
- Canvas/WrapPanel/Controlの時
Gridの上にWrappanelを置き,黄色のControlを置く場所(ControlArea)を用意しています.
startPoint.X = Canvas.GetLeft(WrapPanel.ControlArea);
startPoint.Y = Canvas.GetTop(WrapPanel.ControlArea);
・・・
のように書きたいです.
ビルドはできますが,生成時矢印は表示されません.
よろしくお願いします.
