/Timing & Accessory Belt Analysis

[Visual C# WPF] Shape(size, name, label, text) drag(1)

ki-dragon 2019. 9. 24. 23:42

Binding: Grid를 사용하여 Ellipse와 TextBlock를 묶음

 

앞에선 var를 사용하였으나

실체는 있으나 이름이 없는 사태가 발생

한번 만들고 나서 접근을 할 수 없었다.

 

그래서 배열을 사용, 배열 선언을 착각해 할 수 없다고 판단, 엄청난 길을 돌아왔다.

Grid[] grid = new Grid[15];

Ellipse[] ellipseShape = new Ellipse[15];

TextBlock[] txtShape = new TextBlock[15];

 

Shape에서 이벤트 발생 시, 여기선 마우스 클릭

그 Shape의 정보를 가져 올 수 있다.

지금까지의 문제는 Shape도 가져오고, 이름표도 있지만 부를 수가 없다는 것이었다.

왜 text가 있는데 부르지를 못하니 ㅋㅋ

부르기 위해 grid.name를 설정하면 그래픽이 작동안하는 문제가 발생;;;

결론적으로, var를 array로 변경해서 해결

 

void OnMouseDown(object sender, MouseButtonEventArgs e)

{

   var shape = e.Source as Shape;

      if (shape != null)  

      {

         LayoutRoot.CaptureMouse();

         dragging = true;

         currentP = e.GetPosition(LayoutRoot);

         currentShape = (FrameworkElement)shape.Parent;

      }

}

-------------------------------------------------------------------------

이제는 다음과 같이 비교는 할 수 있다.

여전히 이름은 없지만, grid[0]을 이름이라면 이름이라 할 수도 있다.

currentShape == grid[0]

 

조건문을 사용해 

크기나 텍스트를 바꿀 수 있다.

if (currentShape == grid[0])

{

   // 크기 변경

   grid[0].width = 100;

   grid[0].height = 100;

   // 텍스트 변경

   txtShape[0].text = "새로운내용";

}

 

여기까지, 움직이는 원의 크기, 라벨 변경을 할 수 있는 코딩 완료.

 

다음으로 우클릭 시 새창(속성창이라 부름)을 열어 크기 및 라벨을 바꿀 수 있도록 할 예정이다.