우선 오늘 간단히 코딩을 해 본 내용은 특정 컨트롤을 동적으로 화면에 표시하고 해당 표시된 내용들이 점점 늘어가는 것을 표현할 준비를 해 보았습니다.

 

간단하게는 우선 격자 그리드를 구성하여 작업을 하였으며, 가능하다면 나중에는 화면 크기에 따라 동적으로 안의 배치가 변경되는 Grid도 만들어보고 싶다는 생각이 들었습니다.

 

먼저 고정된 크기에 고르게 9*9 배열로 그리드를 만들어 보았습니다.

 

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.gridunittype?view=netcore-3.1

 

GridUnitType 열거형 (System.Windows)

개체가 보유한 값의 종류를 설명합니다.Describes the kind of value that a object is holding.

docs.microsoft.com

먼저 GridUnitType에 대해서부터 간단히 정리를 하면, Pixel값으로 고정된 값을 사용하는 Pixel과 자동으로 설정하는 Auto 그리고 표시되는 영역에서 비율로 표시하는 Star가 있습니다.

 

자세한 설명은 위의 문서를 참고해주세요.

 

간단하게 실제로 Pixel과 Star를 Xaml 코드에서 사용한 모습입니다.

 

위와 같이 작업을 하면 높이가 30, 그리고 넓이가 Grid의 1/9로 설정된 결과가 아래와 같이 나타납니다.

 

물론 예상한 결과와는 마지막행은 많이 다른 모습입니다.

 

 

<위의 xaml로 디자인된 Form의 모습>

 

 

 

<*(star)만 모두 사용해서 디자인된 폼>

보기는 훨씬 좋은데, 이 *를 쓸 수 없는 상황이 생겼습니다. 우선 9*9 격자에 하나씩 채워가는데 양이 많아지면 크기를 줄이는 것이 아니라 스크롤을 해서 보여줘야 했기 때문이죠. 이때, *를 사용한 Row를 추가하면 기존의 Row들과 같이 1/10, 1/11,... , 점점 열의 높이가 낮아지게 됩니다. 물론 테스트를 해 본 결과 일정 높이 미만으로 줄어들지는 않지만 가시성을 기대할 수 없는 수준이었습니다.

 

 

 

그러던 중 예전에 디자인하며 작업했던 내용인 MinHeight(column은  MinWidth)라는 속성값이 있었던 것을 기억하고 같이 사용하였더니 처음엔 9*9로 보이고 행이 늘어도 너무 작아지지 않도록 적당히 원하는 결과를 얻을 수 있었습니다.

 

 

원하는 결과로 우선 작업된 화면 디자인입니다.

 

 

 

 

뭔가 디자인이 심심해 체스판처럼 색이 배열되도록 잠시 바꿔보았습니다.... 음...

 

 

 

 

정확히는 소스에서 9*9개 즉, 81개를 초과하는 개체가 생성될 때 Row를 추가하는 작업을 하며, 매 9개마다 열을 추가하고 그 열을 위의 속성 값으로 맞춰 생성하여 작업하였습니다.

 

 

오늘 새로 배운 것(해본것!!)!


동적으로 코드에서 컨트롤의 디자인 프로퍼티를 주는 것 (해 본 적이 없었어서....)

newrow.Height = System.Windows.GridLength(30);

소스코드에서 수행 중에 컴포넌트를 추가하며 추가할 컴포넌트의 속성을 설정하여 생성한 뒤 그리드에 추가하여 작업을 했습니다.

 

 

+ Recent posts