動的に長方形を作成にするには、これが最適ではないかもしれませんが、こういうやり方もあるんだなと思っていただければと思います。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPF_RectangleWithEvent
{
public partial class Window1 : Window
{
//現在の長方形の開始座標と終了座標
private Point _StartXY;
private Point _EndXY;
//動的に追加された長方形のコレクション
private List<rectangle> _item = new List<rectangle>();
public Window1()
{
InitializeComponent();
}
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_StartXY = e.GetPosition(this.LayoutRoot);
Rectangle rect = new Rectangle();
this._item.Add(rect);
rect.Fill = Brushes.Green;
this.MouseMove += new MouseEventHandler(Rectangle_MouseMove);
this.CaptureMouse();
this.LayoutRoot.Children.Add(rect);
rect.Width = 0;
rect.Height = 0;
e.Handled = true;
}
void Rectangle_MouseMove(object sender, MouseEventArgs e)
{
Rectangle rect = _item[_item.Count - 1];
_EndXY = e.GetPosition(this.LayoutRoot);
rect.Margin = new Thickness(_StartXY.X, _StartXY.Y, _EndXY.X, _EndXY.Y);
rect.Width = _EndXY.X - _StartXY.X;
rect.Height = _EndXY.Y - _StartXY.Y;
rect.Stroke = Brushes.Blue;
rect.StrokeThickness = 2;
}
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
_EndXY = e.GetPosition(this.LayoutRoot);
Rectangle rect = this._item[this._item.Count - 1];
this.ReleaseMouseCapture();
this.MouseMove -= Rectangle_MouseMove;
rect.Focusable = true;
rect.Margin = new Thickness(_StartXY.X, _StartXY.Y, _EndXY.X, _EndXY.Y);
rect.Stroke = Brushes.Red;
rect.StrokeThickness = 4;
rect.Width = _EndXY.X - _StartXY.X;
rect.Height = _EndXY.Y - _StartXY.Y;
e.Handled = true;
}
}
}