トップ回答者
WPF CANVAS上のshapeをマウスで引いた自由曲線の範囲から検索したい

質問
-
WPFのCANVASに複数のshape(TextBlockやLineなど)を配置しています。
CANVAS上をマウスでドラッグした範囲内にあるshapeを取得したいと思っています。
以下の方法でドラッグした軌跡からPathGeometryを生成しHITTESTしているのですが全くヒットしません。
=================
Private Sub myCanvas_MouseDown(....
マウスドラッグ時にPathFigureを生成しています。
figu.StartPoint = point
End Sub
Private Sub myCanvas_MouseMove(....
figu.Segments.Add(New LineSegment(point, True))
End Sub
ドラッグ完了時にCANVAS内のshape1つ1つにHitTestをしているのですが、
全くヒットしません。
Private Sub myCanvas_MouseUp(....
myPathGeometry.Figures.Add(figu)
....
VisualTreeHelper.HitTest(wktxtblock, Nothing, New HitTestResultCallback(AddressOf MyHitTestResultCallback), New GeometryHitTestParameters(myPathGeometry))
....=================
他の方法でも良いのですが、任意の自由曲線内にあるshapeを検索するには
どうしたらよいでしょうか?
よろしくお願いいたします。
回答
-
そもそも、各マウスイベントは発生していますか? Canvas等のパネル類では、子要素がその座標に存在しない、Backgroundもnull、といった場合マウスイベントを発生させませんが。対策としては、CanvasのBackgroundをTransparentにするのが考えられます。
あとwktxtblockって何でしょうか。普通に考えれば、ここにはCanvasのインスタンスを渡して、HitTestResultCallbackでどの要素がヒットしたかを確認するものと思いますが。
- 回答の候補に設定 星 睦美 2015年2月17日 4:30
- 回答としてマーク Maru Masatoshi 2015年2月21日 0:46
すべての返信
-
そもそも、各マウスイベントは発生していますか? Canvas等のパネル類では、子要素がその座標に存在しない、Backgroundもnull、といった場合マウスイベントを発生させませんが。対策としては、CanvasのBackgroundをTransparentにするのが考えられます。
あとwktxtblockって何でしょうか。普通に考えれば、ここにはCanvasのインスタンスを渡して、HitTestResultCallbackでどの要素がヒットしたかを確認するものと思いますが。
- 回答の候補に設定 星 睦美 2015年2月17日 4:30
- 回答としてマーク Maru Masatoshi 2015年2月21日 0:46
-
ありがとうございます。
マウスイベントは発生していました。
wktxtblockはcanvas内のTextBlockをループで指定したのですが、これが間違いだったようで
ご指摘の通りmyCanvasを渡してやることでHITしました。VisualTreeHelper.HitTest(myCanvas, Nothing, New HitTestResultCallback(AddressOf MyHitTestResultCallback), New GeometryHitTestParameters(myPathGeometry))
そしてHitTestResultCallbackの中で引数のHitTestResultの要素を判定したところやりたいことができました。
ありがとうございました、またの機会がありましたらよろしくお願いいたします。