私は現在、特定の選択ツールを含む一種の画像処理ツールに取り組んでいます。現在の選択範囲 (円など) をユーザーに表示するために、3 つのイベントが使用されます (すべて特定のキャンバス内)。
public MainWindow()
{
InitializeComponent();
}
private Ellipse _ellip = new Ellipse();
private Point _p = new Point();
private bool _mouse = false;
private double _xcor, _ycor;
private void mouseDown(object sender, MouseButtonEventArgs e)
{
_p = Mouse.GetPosition(canvas1);
_xcor = _p.X;
_ycor = _p.Y;
_mouse = true;
}
private void newPos(object sender, MouseEventArgs e)
{
if (mouse)
{
_ellip.Visibility = Visibility.Visible;
_p = Mouse.GetPosition(canvas1);
_ellip.Margin = new Thickness((_xcor + _p.X) / 2 - Math.Sqrt((_xcor - _p.X) * (_xcor - _p.X) + (_ycor - _p.Y) * (_ycor - _p.Y)) / 2, (_ycor + _p.Y) / 2 - Math.Sqrt((_xcor - _p.X) * (_xcor - _p.X) + (_ycor - _p.Y) * (_ycor - _p.Y)) / 2, 0, 0);
ellip.Height = Math.Sqrt((_xcor - _p.X) * (_xcor - _p.X) + (_ycor - _p.Y) * (_ycor - _p.Y));
ellip.Width = Math.Sqrt((_xcor - _p.X) * (_xcor - _p.X) + (_ycor - _p.Y) * (_ycor - _p.Y));
}
InvalidateVisual();
}
private void mouseUp(object sender, MouseButtonEventArgs e)
{
mouse = false;
ellip.Visibility = Visibility.Hidden;
}
これは、円の背後に何らかの形があるという 1 つの条件の下ですべて正常に機能します。どういうわけか、イベント MouseLeftButtonDown/Up および MouseMove は、canvas1 の空の領域で使用された場合に発生しません。たとえば、キャンバスを塗りつぶす長方形を作成すると、すべてが正常に機能します。しかし、それには別の問題が伴います。長方形がキャンバスよりも大きい場合、基本的にキャンバスの外に出て、イベントはキャンバスの外でも機能します (長方形の上にある限り)。ここで何が問題なのか本当にわかりません。