お世話になります。
調べたのですが、分からないため教えてください。
実現したいこと
Rectangleの内容をDataGridに表示させ
今編集しようとしているRectangleの行を選択して値を動的に変更したい
作成済みのRectangleを選択すると、
選択したRectangleと同じDataGridの行が選択したい
前提
MainWindowと、SubWindow(画像選択用)、DataGridList(四角形のデータ表示用)があります。
MainWindowに四角形を描画し、その四角形を移動させたり拡縮させたりしたいです。
選択したRectの情報はActiveRectで取得できているのですが移動ができません。
とりあえず「DataGridList.xaml」を作成しました。
データをDataGridList.xamlに表示出来そうですが
Rectangleを選択したら、同じ値のDataGrid行を選択できますか?
編集中の図形「activeRect」を取得することは出来ています。
該当のソースコード
MainWindow.xaml.cs
1namespace TEST 2{ 3 public partial class MainWindow : Window 4 { 5 public MainWindow() 6 { 7 InitializeComponent(); 8 DataContext = new ViewModel(); 9 } 10 private void MyCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 11 { 12 var point = e.GetPosition(MyCanvas); 13 var leftOffset = point.X % 10; 14 leftOffset = leftOffset < 5 ? -leftOffset : 10 - leftOffset; 15 var topOffset = point.Y % 10; 16 topOffset = topOffset < 5 ? -topOffset : 10 - topOffset; 17 StartPoint = new Point(point.X + leftOffset, point.Y + topOffset); 18 rectangle = new System.Windows.Shapes.Rectangle 19 { 20 Stroke = Brushes.Black, 21 Fill = Brushes.LightBlue, 22 HorizontalAlignment = HorizontalAlignment.Left, 23 VerticalAlignment = VerticalAlignment.Top, 24 Width = 0, 25 Height = 0, 26 Opacity = 0.3, 27 }; 28 Panel.SetZIndex(rectangle, 0);//最前面表示 29 Canvas.SetLeft(rectangle, StartPoint.X); 30 Canvas.SetTop(rectangle, StartPoint.Y); 31 MyCanvas.Children.Add(rectangle); 32 isMouseDown = true; 33 } 34 private void MyCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 35 { 36 var R_X = StartPoint.X; 37 var R_Y = StartPoint.Y; 38 if (MovePoint.X - StartPoint.X <= 0) R_X = MovePoint.X; 39 if (MovePoint.Y - StartPoint.Y <= 0)R_Y = MovePoint.Y; 40 var R_H = rectangle.Height; 41 var R_W = rectangle.Width; 42 MyCanvas.Children.Remove(rectangle); 43 MyRect NowRect = new RectangleItem { X = R_X, Y = R_Y, Width = R_W, Height = R_H }; 44 ((ViewModel)DataContext).MyRects.Add(NowRect); 45 isMouseDown = false; 46 rectangle.Opacity = 1; 47 } 48 49 50 private void MyCanvas_MouseMove(object sender, MouseEventArgs e) 51 { 52if (!isMouseDown) return; 53var point = e.GetPosition(MyCanvas); 54var leftOffset = point.X % 10; 55leftOffset = leftOffset < 5 ? -leftOffset : 10 - leftOffset; 56var topOffset = point.Y % 10; 57topOffset = topOffset < 5 ? -topOffset : 10 - topOffset; 58MovePoint = new Point(point.X + leftOffset, point.Y + topOffset); 59rectangle.Width = Math.Abs(MovePoint.X - StartPoint.X); 60rectangle.Height = Math.Abs(MovePoint.Y - StartPoint.Y); 61 if (MovePoint.X - StartPoint.X <= 0)Canvas.SetLeft(rectangle, MovePoint.X); 62 if (MovePoint.Y - StartPoint.Y <= 0)Canvas.SetTop(rectangle, MovePoint.Y); 63 } 64 65private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 66 { 67 activeRect = sender as System.Windows.Shapes.Rectangle; 68 if (activeRect == null) return; 69 if (e.LeftButton != MouseButtonState.Pressed) return; 70 activeRect.Fill = Brushes.AliceBlue; 71 } 72 private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 73 { 74 Cursor = Cursors.Arrow; 75 } 76 } 77} 78
試したこと
動かすことを最優先です。
Gridが追加され、中にRectangle、LINEがあることを確認。
Rectangleクリック移動で、RectangleMoveなどのイベントが動作確認済。
ビジュアルツリーモード中にMyRectの値を変更してもRect移動なしでした。
((ViewModel)DataContext).MyRects.Add(NowRect);
だから図形が動かないのでしょうか?
図形のドラッグ移動に関する資料がそこまでないのと、
複数図形を配置してXやYなどの座標をBinding?で動かそうとしている資料があまりなく
参考になるサイト等があれば教えてください。
補足情報(FW/ツールのバージョンなど)
Visualstudio2022 V17.6.3
.NET 6.0 C#

0 コメント