私はWPFを初めて使用しています。WPF Circle on Mouseイベントを描画する方法
マウスの移動イベントでキャンバスに円を描きたいと思います。私はすでにそれをキャンバスの周りにドラッグするロジックを書いています。しかし、キャンバス上をマウスがクリックしたときに円を作成したいと思っていました。キャンバス上でのマウスの移動に合わせてサイズを変更する必要がありました。
どうすればこの問題を解決できますか?
は、ここに私のコードのそれは一度だけあなたのリスナーを添付する方が良いでしょう
Ellipse elip = new Ellipse();
private double pointx;
private double pointy;
private void canvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
canvas.MouseMove -= MouseMove_NotDown;
canvas.MouseMove += canvas_PreviewMouseMove;
canvas.MouseUp += canvas_PreviewMouseUp;
Point location = e.MouseDevice.GetPosition(canvas);
elip = new Ellipse();
elip.Height = 1;
elip.Width = 1;
elip.Stroke = Brushes.Black;
elip.StrokeThickness = 2;
Canvas.SetTop(elip, location.Y + 1);
Canvas.SetLeft(elip, location.X + 1);
pointx = location.X + 1;
pointy = location.Y + 1;
canvas.Children.Add(elip);
}
private void MouseMove_NotDown(object sender, MouseEventArgs e)
{
canvas.Cursor = Cursors.Hand;
}
private void canvas_PreviewMouseMove(object sender, MouseEventArgs e)
{
try
{
Point location = e.MouseDevice.GetPosition(canvas);
double height = location.Y - pointy;
double width = location.X - pointx;
if (height >= 0 && width >= 0)
{
elip.Height = height;
elip.Width = width;
}
else if (height < 0 || width < 0)
{
if (height < 0)
{
elip.Height = height + (-height) + 1;
elip.Width = width;
}
else if (width < 0)
{
elip.Height = height;
elip.Width = width + (-width) + 1;
}
}
}
catch
{
}
}
private void canvas_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
elip.Stroke = Brushes.Black;
elip.StrokeThickness = 2;
canvas.MouseMove -= canvas_PreviewMouseMove;
canvas.MouseMove += MouseMove_NotDown;
canvas.MouseUp += canvas_PreviewMouseUp;
}
これまでに何を試しましたか? – tabby
これまでに試したことを投稿してください。いくつかのポインタは、あなたのキャンバスの背景を色に設定します(色が必要ない場合は透明です)。そうでない場合、マウスクリックイベントは発生しません。次に、MouseDownとMouseMoveイベントハンドラを使用します。 –
ありがとうございます。私は自分のコードを更新しました。前もって感謝します。 –