teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/09/30 06:24

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,1 +1,44 @@
1
- MyPolyline が初期化されるのはマウスの左ボタンが押された時なので、それ以前にマウスを動かすと例外が発生します。
1
+ MyPolyline が初期化されるのはマウスの左ボタンが押された時なので、それ以前にマウスを動かすと例外が発生します。
2
+ #追記
3
+
4
+ 次のようにして実行してみると、MouseLeftButtonDown3 が書き込まれる前に canvas_MouseMove に処理が移っていました。
5
+ path.Fill との関連はわかりませんが、おそらくは何らかの条件のもと、canvas.CaptureMouse() の処理の中で MouseMove が起こるような処理がされているのだと思います。
6
+
7
+ ```C#
8
+ private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
9
+ {
10
+ Debug.WriteLine("MouseLeftButtonDown1");
11
+ IsDrawing = true;
12
+ Debug.WriteLine("MouseLeftButtonDown2");
13
+ canvas.CaptureMouse();
14
+ Debug.WriteLine("MouseLeftButtonDown3");
15
+ MyPolyline = new Polyline();
16
+ Debug.WriteLine("MouseLeftButtonDown4");
17
+ MyPolyline.Stroke = Brushes.Blue;
18
+ Debug.WriteLine("MouseLeftButtonDown5");
19
+ MyPolyline.StrokeThickness = 20;
20
+ Debug.WriteLine("MouseLeftButtonDown6");
21
+ MyPolyline.StrokeLineJoin = PenLineJoin.Round;
22
+ Debug.WriteLine("MouseLeftButtonDown7");
23
+ MyListPolyline.Add(MyPolyline);
24
+ Debug.WriteLine("MouseLeftButtonDown8");
25
+ canvas.Children.Add(MyPolyline);
26
+ Debug.WriteLine("MouseLeftButtonDown9");
27
+ }
28
+ ```
29
+
30
+ 次のように IsDrawing = true を最後に置くことで正常動作しました。
31
+
32
+ ```C#
33
+ private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
34
+ {
35
+ canvas.CaptureMouse();
36
+ MyPolyline = new Polyline();
37
+ MyPolyline.Stroke = Brushes.Blue;
38
+ MyPolyline.StrokeThickness = 20;
39
+ MyPolyline.StrokeLineJoin = PenLineJoin.Round;
40
+ MyListPolyline.Add(MyPolyline);
41
+ canvas.Children.Add(MyPolyline);
42
+ IsDrawing = true;
43
+ }
44
+ ```