マウスドラッグ移動で四角枠を表示して枠内のThumbを取得
デザイン画面とXAML
syoki
枠の位置と大きさはマウスドラッグ移動開始位置と今の位置で決めるので
開始位置(初期位置)を記録しておく必要がある
IsDrag
マウスドラッグ移動中かどうかの判定用
waku
赤枠はPathで描く、マウスドラッグ移動による大きさ変更はPath.Dataの変更で行う表示非表示の切り替えはChildren.Add(waku)とChildren.Remove(waku)で行う
tList
すべてのThumbの入れ物
渡されたUIElementの位置(Point)を返す
GetLocate
Pointにして返しているだけ
今思ったけど3行も書かなくても
こう書けば1行で済むじゃん
1行で済むならわざわざメソッドにしなくても良さそうなんだけど
GetLeftもGetTopもタイプしづらい、GetLocateはタイプしやすい
Path.Dataの変更をする
SetPathDataメソッド
渡された位置(p)と初期位置(syoki)を使って
サイズと位置を指定した四角形(Rect)を作成
四角形を使ってPathの四角形データになるRectangleGeometryを作成
waku(Path).Dataに四角形データを指定する
赤枠に少しでも触れているThumbすべてを取得して赤色に変える
SelectThumb
48行目、Path.Data.Boundsで赤枠のRect(位置とサイズ)が取得できる
For Eachを使ってすべてのThumbと重なっている(触れている)かどうか判定
Thumbの位置はGetLocateで取得
サイズはRenderSizeプロパティから取得して
これを使ってRectを作成、51行目
枠のRectとThumbのRectを比較しているのが53行目で
RectクラスのIntersectsWithっていうメソッドを使っている
これが便利なもので渡した2つのRectが少しでも重なるようならTrueを返して
そうでなければFalseを返してくれる
55行目で赤色に変える
canvas1上で左クリック時(マウスドラッグ移動開始時)
GetPositionメソッドでクリック位置の記録、78行目
81行目でcanvas1に枠表示されるけど80行目でデータが0になっているので実質的に非表示のはず
82行目はマウスドラッグ移動中ですよフラグ
マウス移動中
マウスドラッグ移動中ではない状態ならなにもしないで終了
マウスドラッグ移動中なら
今のマウスの位置をGetPositionメソッドで取得してSetPathDataへ渡してPath.Dataの変更(枠の大きさ変更)
canvas1上で左クリック離した時(マウスドラッグ移動終了時)
SelectThumbメソッドを実行、93行目
赤枠の消去が97行目
グループ化するときにはどれをグループ化するのか複数の対象を選択する必要があるので作ってみた
マウスドラッグ移動で選択する他によくあるのはctrlキーを押しながらクリックとかあるけど難しそうなので見送ったw
今回のコード全部
Wpf_test127_マウスドラッグ移動で範囲選択 - Visual Studio Team Services
https://gogowaten.visualstudio.com/WPF/_git/WPF_test7?path=%2FWpf_test127_%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%E7%A7%BB%E5%8B%95%E3%81%A7%E7%AF%84%E5%9B%B2%E9%81%B8%E6%8A%9E&version=GBmaster&_a=contents
https://gogowaten.visualstudio.com/WPF/_git/WPF_test7?path=%2FWpf_test127_%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%E7%A7%BB%E5%8B%95%E3%81%A7%E7%AF%84%E5%9B%B2%E9%81%B8%E6%8A%9E&version=GBmaster&_a=contents
関連記事
前回は昨日
WPFとVB.NET、エクセルのグループ化とグループ化解除を真似したい3 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14187560.html
http://blogs.yahoo.co.jp/gogowaten/14187560.html
次回は5日後
WPFとVB.NET、エクセルのグループ化とグループ化解除を真似したい4 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14203583.html
http://blogs.yahoo.co.jp/gogowaten/14203583.html