回答編集履歴

1

追記

2018/09/30 06:24

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -1 +1,87 @@
1
1
  MyPolyline が初期化されるのはマウスの左ボタンが押された時なので、それ以前にマウスを動かすと例外が発生します。
2
+
3
+ #追記
4
+
5
+
6
+
7
+ 次のようにして実行してみると、MouseLeftButtonDown3 が書き込まれる前に canvas_MouseMove に処理が移っていました。
8
+
9
+ path.Fill との関連はわかりませんが、おそらくは何らかの条件のもと、canvas.CaptureMouse() の処理の中で MouseMove が起こるような処理がされているのだと思います。
10
+
11
+
12
+
13
+ ```C#
14
+
15
+ private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
16
+
17
+ {
18
+
19
+ Debug.WriteLine("MouseLeftButtonDown1");
20
+
21
+ IsDrawing = true;
22
+
23
+ Debug.WriteLine("MouseLeftButtonDown2");
24
+
25
+ canvas.CaptureMouse();
26
+
27
+ Debug.WriteLine("MouseLeftButtonDown3");
28
+
29
+ MyPolyline = new Polyline();
30
+
31
+ Debug.WriteLine("MouseLeftButtonDown4");
32
+
33
+ MyPolyline.Stroke = Brushes.Blue;
34
+
35
+ Debug.WriteLine("MouseLeftButtonDown5");
36
+
37
+ MyPolyline.StrokeThickness = 20;
38
+
39
+ Debug.WriteLine("MouseLeftButtonDown6");
40
+
41
+ MyPolyline.StrokeLineJoin = PenLineJoin.Round;
42
+
43
+ Debug.WriteLine("MouseLeftButtonDown7");
44
+
45
+ MyListPolyline.Add(MyPolyline);
46
+
47
+ Debug.WriteLine("MouseLeftButtonDown8");
48
+
49
+ canvas.Children.Add(MyPolyline);
50
+
51
+ Debug.WriteLine("MouseLeftButtonDown9");
52
+
53
+ }
54
+
55
+ ```
56
+
57
+
58
+
59
+ 次のように IsDrawing = true を最後に置くことで正常動作しました。
60
+
61
+
62
+
63
+ ```C#
64
+
65
+ private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
66
+
67
+ {
68
+
69
+ canvas.CaptureMouse();
70
+
71
+ MyPolyline = new Polyline();
72
+
73
+ MyPolyline.Stroke = Brushes.Blue;
74
+
75
+ MyPolyline.StrokeThickness = 20;
76
+
77
+ MyPolyline.StrokeLineJoin = PenLineJoin.Round;
78
+
79
+ MyListPolyline.Add(MyPolyline);
80
+
81
+ canvas.Children.Add(MyPolyline);
82
+
83
+ IsDrawing = true;
84
+
85
+ }
86
+
87
+ ```