반응형

https://studyingpingu.tistory.com/77

 

[C#] 그리드 영역 나누는 RowDefinition과 GridSplitter 동적 생성하는 법

grid를 분할할수있는 RowDefinition과 분할 영역을 자유롭게 바꿀수있는 gridsplitter를 c# 코드적으로 생성하는 법을 기록해봄 이 방법을 응용하면 columndefinition에도 적용이 가능하다 gridsplitter란 진짜..

studyingpingu.tistory.com

 

 

 

 

저번글에 이어 조금더 완성도가 높아진 gridsplitter 글

 

 

그리드의 row, column의 영역을 마우스 드래그로 조절할수있는 gridsplitter 추가 예제

 

divideCnt만 정해주면 그만큼 gridsplitter 추가해주는 코드

 

public void divideRowAuto()
{	
	if (divideCnt == 0) return;

	double dividedHeight = mainGrid.Height / divideCnt;

	mainGrid.RowDefinitions.Clear();
	mainGrid.Children.Clear();

	//첫번째 로우
	RowDefinition row = new RowDefinition()
	{
		Height = new GridLength(dividedHeight, GridUnitType.Star),
		MinHeight = 30
	};
	mainGrid.RowDefinitions.Add(row);

	for (int i = 1; i <= (divideCnt - 1) * 2; i += 2)
	{
		RowDefinition row1 = new RowDefinition()
		{
			Height = new GridLength(15),
			MaxHeight = 15,
			MinHeight = 15
		};

		GridSplitter splitter1 = new GridSplitter()
		{
			VerticalAlignment = VerticalAlignment.Center,
			HorizontalAlignment = HorizontalAlignment.Stretch,
			ResizeBehavior = GridResizeBehavior.PreviousAndNext,
			Background = new SolidColorBrush(Colors.Red),
			Height = 2
		};
		mainGrid.RowDefinitions.Add(row1);
		mainGrid.Children.Add(splitter1);
		
		Grid.SetRow(splitter1, i);
		Grid.SetColumn(splitter1, 0);

		RowDefinition row2 = new RowDefinition()
		{
			Height = new GridLength(dividedHeight, GridUnitType.Star),
			MinHeight = 30,
		};

		mainGrid.RowDefinitions.Add(row2);
	}
}

 

코드 요약

gridsplitter는 독립된 row에 하나씩 배치된다

rowdefinition은 추가하면 이거 자체가 row다 보니 순서대로 추가가 되지만

gridsplitter를 생성한 다음 그리드에 추가하고 row를 세팅해줘야 분할하고자 하는 위치에 정확하게 추가된다

 

gridsplitter 1개가 생기면 row는 총 3개가 된다

 

 

 

6분할 예시 (divideCnt가 6인 경우 gridsplitter는 5개가 생성됨)

 

반응형

+ Recent posts