2013-04-22 6 views
2

나는 타원, 선 및 직사각형을 그리는 간단한 응용 프로그램을 가지고 있습니다.캔버스에있는 마우스 클릭 객체

코드 : 그들이 마우스로 클릭 할 때

private void Canvas_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     startPoint = e.GetPosition(canvas); 

     if(figura == "linia") 
     { 
      linia = new Line 
      { 
       Stroke = Brushes.LightBlue, 
       StrokeThickness = 2 
      }; 

      canvas.Children.Add(linia); 
     } 

     if (figura == "kwadrat") 
     { 
      rect = new Rectangle 
      { 
       Stroke = Brushes.LightBlue, 
       StrokeThickness = 2 
      }; 

      Canvas.SetLeft(rect, startPoint.X); 
      Canvas.SetTop(rect, startPoint.X); 

      canvas.Children.Add(rect); 
     } 

     else if (figura == "kolko") 
     { 
      circ = new Ellipse 
      { 
       Stroke = Brushes.LightBlue, 
       StrokeThickness = 2 
      }; 

      Canvas.SetLeft(circ, startPoint.X); 
      Canvas.SetTop(circ, startPoint.X); 

      canvas.Children.Add(circ); 
     } 
    } 

    private void Canvas_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.LeftButton == MouseButtonState.Released || rect == null && circ == null && linia == null) 
      return; 

     var pos = e.GetPosition(canvas); 

     var x = Math.Min(pos.X, startPoint.X); 
     var y = Math.Min(pos.Y, startPoint.Y); 

     var w = Math.Max(pos.X, startPoint.X) - x; 
     var h = Math.Max(pos.Y, startPoint.Y) - y; 

     if(figura == "linia") 
     { 
      linia.X1 = startPoint.X; 
      linia.Y1 = startPoint.Y; 
      linia.X2 = pos.X; 
      linia.Y2 = pos.Y; 
     } 

     if (figura == "kwadrat") 
     { 
      rect.Width = w; 
      rect.Height = h; 

      Canvas.SetLeft(rect, x); 
      Canvas.SetTop(rect, y); 
     } 

     if (figura == "kolko") 
     { 
      circ.Width = w; 
      circ.Height = h; 

      Canvas.SetLeft(circ, x); 
      Canvas.SetTop(circ, y); 
     } 
    } 
    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     rect = null; 
     circ = null; 
    } 

지금 내가 크기 조정과 같은 객체 뭔가를하고 싶은 등 이동합니다. 나는 마우스로 클릭 한 객체를 어떻게 찾을 수 있는지 모른다. 너 나 좀 도와 줄 수있어?

+1

혼자서 모든 것을하기 전에. [Thumb] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx) 컨트롤을 사용하면 개체의 크기를 조정하고 이동할 때 완벽하게 작동합니다. 그 외에도 캔버스가 항목에 대해 알아야하는 이유는 무엇입니까? Panel과 ItemsControl이 무엇인지 확인해야합니다. – dowhilefor

+0

읽어보기 : http://msdn.microsoft.com/en-us/library/ms752097.aspx – mlemay

답변

2

e.OriginalSource 실제로 클릭 한 컨트롤이 표시됩니다.

+0

사실 OriginalSource는 복잡한 컨트롤이나 사용자 컨트롤에서 원래 요소를 제공합니다. 예를 들어 Button을 클릭하면 OriginalSource는 Border 요소 또는 ButtonChrome 요소 일 수 있지만 Source는 항상 Button 자체입니다. –

+0

괜찮 았는데, 어떤 물건을 클릭했을 때 어떤 행동이 끝났지 만. 클릭 한 줄에 대해 X1을 변경하려고하면 : e.OriginalSource.X1 = 50; 그것은 오류입니다. – Finchsize

+2

@Finchsize 그것을 캐스팅하는 것을 잊었습니까? 이 속성은 객체를 반환합니다. –

2

RoutedEvent.Source 속성을 사용하십시오.

if (e.Source is Rectangle) 
{ 
} 
else if (e.Source is Ellipse) 
{ 
} 
else if (e.Source is Line) 
{ 
}