2013-10-08 3 views
0

Теперь я хочу нарисовать прямоугольник на холсте при щелчке мыши на событии. Вот мой код:Нарисуйте прямоугольник и обновите его при каждом щелчке мышью

protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
    ... 
     System.Windows.Point startPoint = e.GetPosition(canvas1); 
     rect = new System.Windows.Shapes.Rectangle 
     { 
      Stroke = System.Windows.Media.Brushes.LightBlue, 
      StrokeThickness = 10 
     }; 
     Canvas.SetLeft(rect, startPoint.X); 
     Canvas.SetTop(rect, startPoint.Y); 
     canvas1.Children.Add(rect); 
    } 

    private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     rect = null; 
    } 

Он отлично работает каждый раз, я щелкнул мышью, но почему старый прямоугольник еще на холсте, когда я перекроить новый? Что я сделал не так?

EDIT Теперь это правильно, я не больше, и вместо этого нужно Canvas_MouseMove:

protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
    ... 
     canvas1.Children.Remove(rect); 
     System.Windows.Point startPoint = e.GetPosition(canvas1); 
     rect = new System.Windows.Shapes.Rectangle 
     { 
      Stroke = System.Windows.Media.Brushes.LightBlue, 
      StrokeThickness = 10 
     }; 
     Canvas.SetLeft(rect, startPoint.X); 
     Canvas.SetTop(rect, startPoint.Y); 
     canvas1.Children.Add(rect); 
    } 
+0

Вы устанавливаете 'rect = null', но вы не удаляете старый прямоугольник из Canvas. – Vladimir

ответ

3

Вы звоните:

rect = new System.Windows.Shapes.Rectangle(...); 

И потом:

canvas1.Children.Add(rect); 

Что добавит другой новый Rectangle в ваш Canvas.Children коллекция. Если вы хотите сначала удалить старый, то позвоните по этому поводу:

canvas1.Children.Remove(rect); 
+0

Это работает спасибо. – user2754279