質問編集履歴
3
追記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -179,7 +179,6 @@
|
|
179
179
|
```
|
180
180
|
|
181
181
|
```xaml.cs
|
182
|
-
public ObservableCollection<MyRect> MyRects = new ObservableCollection<MyRect>();
|
183
182
|
|
184
183
|
public MainWindow()
|
185
184
|
{
|
@@ -226,7 +225,6 @@
|
|
226
225
|
MyCanvas.Children.Remove(rectangle);
|
227
226
|
MyRects.Add(new RectangleItem { X = R_X, Y = R_Y, Width =R_W, Height =R_H, Fill = Brushes.Transparent, Stroke=Brushes.Red});
|
228
227
|
|
229
|
-
// MyRects.Add(new MyRect(R_X,R_Y,R_H,R_W, Brushes.Red, Brushes.Transparent));
|
230
228
|
|
231
229
|
isMouseDown = false;
|
232
230
|
rectangle.Opacity = 1;
|
@@ -254,6 +252,23 @@
|
|
254
252
|
</ItemsControl>
|
255
253
|
</Grid>
|
256
254
|
```
|
255
|
+
```MyRect.cs
|
256
|
+
public class MyRect
|
257
|
+
{
|
258
|
+
public double X { get; set; }
|
259
|
+
public double Y { get; set; }
|
260
|
+
public double Width { get; set; }
|
261
|
+
public double Height { get; set; }
|
262
|
+
|
263
|
+
}
|
264
|
+
|
265
|
+
public class RectangleItem : MyRect
|
266
|
+
{
|
267
|
+
public Brush Stroke { get; set; } = Brushes.Red;
|
268
|
+
public Brush Fill { get; set; } = Brushes.Transparent;
|
269
|
+
}
|
270
|
+
```
|
271
|
+
|
257
272
|
MyCanvas.Children.Remove(rectangle);で
|
258
273
|
描画していた四角形を消すところまでは出来ましたが、
|
259
274
|
Rectangleが動的生成されません。なぜでしょう……?
|
@@ -263,6 +278,10 @@
|
|
263
278
|
Rectangleが自動生成されない
|
264
279
|
→やはりViewModel.csに追加していないから?
|
265
280
|
|
281
|
+
((ViewModel)DataContext).MyRects.Add(new RectangleItem { X = 100, Y = 50, Width = 50, Height = 50 });
|
282
|
+
LeftButtonup時に上記内容を追加するようにしたら
|
283
|
+
MyRectsに値は追加されましたが四角形は表示されませんでした。
|
284
|
+
|
266
285
|
|
267
286
|
|
268
287
|
### 補足情報(FW/ツールのバージョンなど)
|
2
一部間違えていたので修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -157,31 +157,79 @@
|
|
157
157
|
(移動や拡縮は、おいおいやります)
|
158
158
|
|
159
159
|
とりあえず勉強の為、別で1つ作りました。
|
160
|
+
|
160
|
-
```
|
161
|
+
```Rect.cs
|
161
|
-
public ObservableCollection<Item> Items { get; }
|
162
|
-
|
163
|
-
public class
|
162
|
+
public class MyRect
|
164
163
|
{
|
165
164
|
public double X { get; set; }
|
166
165
|
public double Y { get; set; }
|
167
166
|
public double Width { get; set; }
|
168
167
|
public double Height { get; set; }
|
168
|
+
|
169
|
-
}
|
169
|
+
}
|
170
|
-
|
170
|
+
|
171
|
-
public class RectangleItem :
|
171
|
+
public class RectangleItem : MyRect
|
172
|
-
{
|
172
|
+
{
|
173
|
+
public Brush Stroke { get; set; }
|
173
174
|
public Brush Fill { get; set; }
|
174
175
|
}
|
175
176
|
|
177
|
+
|
178
|
+
}
|
179
|
+
```
|
180
|
+
|
181
|
+
```xaml.cs
|
182
|
+
public ObservableCollection<MyRect> MyRects = new ObservableCollection<MyRect>();
|
183
|
+
|
176
184
|
public MainWindow()
|
177
185
|
{
|
178
186
|
InitializeComponent();
|
179
|
-
|
187
|
+
var imageFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "image");
|
180
|
-
|
181
|
-
|
188
|
+
DataContext = new ViewModel(imageFolder);
|
189
|
+
}
|
190
|
+
|
191
|
+
private void MyCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
182
|
-
|
192
|
+
{
|
193
|
+
var point = e.GetPosition(MyCanvas);
|
194
|
+
|
195
|
+
var leftOffset = point.X % 10;
|
183
|
-
|
196
|
+
leftOffset = leftOffset < 5 ? -leftOffset : 10 - leftOffset;
|
197
|
+
var topOffset = point.Y % 10;
|
198
|
+
topOffset = topOffset < 5 ? -topOffset : 10 - topOffset;
|
199
|
+
|
200
|
+
StartPoint = new Point(point.X + leftOffset, point.Y + topOffset);
|
201
|
+
|
202
|
+
rectangle = new Rectangle
|
203
|
+
{
|
204
|
+
Stroke = Brushes.Black,
|
205
|
+
Fill = Brushes.LightBlue,
|
206
|
+
HorizontalAlignment = HorizontalAlignment.Left,
|
207
|
+
VerticalAlignment = VerticalAlignment.Top,
|
208
|
+
Width = 0,
|
209
|
+
Height = 0,
|
210
|
+
Opacity = 0.3
|
184
211
|
};
|
212
|
+
|
213
|
+
Canvas.SetLeft(rectangle, StartPoint.X);
|
214
|
+
Canvas.SetTop(rectangle, StartPoint.Y);
|
215
|
+
MyCanvas.Children.Add(rectangle);
|
216
|
+
|
217
|
+
isMouseDown = true;
|
218
|
+
}
|
219
|
+
|
220
|
+
private void MyCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
221
|
+
{
|
222
|
+
var R_X = MovePoint.X;
|
223
|
+
var R_Y = MovePoint.Y;
|
224
|
+
var R_H=rectangle.ActualHeight;
|
225
|
+
var R_W=rectangle.ActualWidth;
|
226
|
+
MyCanvas.Children.Remove(rectangle);
|
227
|
+
MyRects.Add(new RectangleItem { X = R_X, Y = R_Y, Width =R_W, Height =R_H, Fill = Brushes.Transparent, Stroke=Brushes.Red});
|
228
|
+
|
229
|
+
// MyRects.Add(new MyRect(R_X,R_Y,R_H,R_W, Brushes.Red, Brushes.Transparent));
|
230
|
+
|
231
|
+
isMouseDown = false;
|
232
|
+
rectangle.Opacity = 1;
|
185
233
|
}
|
186
234
|
```
|
187
235
|
```MainWindow.xaml
|
@@ -213,6 +261,7 @@
|
|
213
261
|
①ViewModel.csにRectsを追加しなければならないのか?
|
214
262
|
②MyRectsの値を見るとちゃんと値は入っているものの
|
215
263
|
Rectangleが自動生成されない
|
264
|
+
→やはりViewModel.csに追加していないから?
|
216
265
|
|
217
266
|
|
218
267
|
|
1
現在試していることを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -148,29 +148,72 @@
|
|
148
148
|
}
|
149
149
|
```
|
150
150
|
|
151
|
-
### 試したこと
|
151
|
+
### 試したこと(6/20 9:30修正)
|
152
|
-
|
152
|
+
Canvasコントロールの子要素を動的に増減させたい
|
153
|
-
|
153
|
+
https://teratail.com/questions/359699
|
154
|
+
|
155
|
+
とりあえず、Rectangleの値を動的に生成したり、
|
156
|
+
選択したRectangleのサイズ等を取得したいです。
|
157
|
+
(移動や拡縮は、おいおいやります)
|
158
|
+
|
159
|
+
とりあえず勉強の為、別で1つ作りました。
|
160
|
+
```xaml.cs
|
161
|
+
public ObservableCollection<Item> Items { get; }
|
162
|
+
|
163
|
+
public class Item
|
164
|
+
{
|
165
|
+
public double X { get; set; }
|
166
|
+
public double Y { get; set; }
|
167
|
+
public double Width { get; set; }
|
168
|
+
public double Height { get; set; }
|
169
|
+
}
|
170
|
+
|
171
|
+
public class RectangleItem : Item
|
172
|
+
{
|
173
|
+
public Brush Fill { get; set; }
|
174
|
+
}
|
175
|
+
|
176
|
+
public MainWindow()
|
177
|
+
{
|
178
|
+
InitializeComponent();
|
179
|
+
DataContext = this;
|
180
|
+
|
181
|
+
Items = new ObservableCollection<Item>
|
182
|
+
{
|
183
|
+
new RectangleItem { X = 200, Y = 200, Width = 100, Height = 50, Fill = Brushes.Blue, },
|
184
|
+
};
|
185
|
+
}
|
186
|
+
```
|
154
|
-
MainWindow.xaml
|
187
|
+
```MainWindow.xaml
|
155
|
-
|
188
|
+
<Window.Resources>
|
156
|
-
p
|
189
|
+
<DataTemplate DataType="{x:Type local:RectangleItem}">
|
190
|
+
<Rectangle Width="{Binding Width}" Height="{Binding Height}" Fill="{Binding Fill}" Stroke="{Binding Stroke}" />
|
191
|
+
</DataTemplate>
|
192
|
+
</Window.Resources>
|
193
|
+
<Grid>
|
157
|
-
|
194
|
+
<ItemsControl ItemsSource="{Binding MyRects}">
|
158
|
-
|
195
|
+
<ItemsControl.ItemsPanel>
|
159
|
-
|
196
|
+
<ItemsPanelTemplate>
|
160
|
-
とりあえずMyRectsに入れることにしました。
|
161
|
-
色の値とかも含めて入れてみました。
|
162
|
-
|
197
|
+
<Canvas />
|
163
|
-
var R_Y = MovePoint.Y;
|
164
|
-
|
198
|
+
</ItemsPanelTemplate>
|
165
|
-
|
199
|
+
</ItemsControl.ItemsPanel>
|
200
|
+
<ItemsControl.ItemContainerStyle>
|
201
|
+
<Style>
|
202
|
+
<Setter Property="Canvas.Left" Value="{Binding X}" />
|
166
|
-
|
203
|
+
<Setter Property="Canvas.Top" Value="{Binding Y}" />
|
204
|
+
</Style>
|
205
|
+
</ItemsControl.ItemContainerStyle>
|
206
|
+
</ItemsControl>
|
207
|
+
</Grid>
|
208
|
+
```
|
167
|
-
|
209
|
+
MyCanvas.Children.Remove(rectangle);で
|
168
|
-
|
210
|
+
描画していた四角形を消すところまでは出来ましたが、
|
169
|
-
|
211
|
+
Rectangleが動的生成されません。なぜでしょう……?
|
212
|
+
|
213
|
+
①ViewModel.csにRectsを追加しなければならないのか?
|
214
|
+
②MyRectsの値を見るとちゃんと値は入っているものの
|
170
|
-
|
215
|
+
Rectangleが自動生成されない
|
171
|
-
|
216
|
+
|
172
|
-
|
173
|
-
初歩的な質問で大変申し訳ありませんが、回答よろしくお願いいたします。
|
174
217
|
|
175
218
|
|
176
219
|
### 補足情報(FW/ツールのバージョンなど)
|