programing

사용 가능한 공간을 채우기 위해 WPF의 컨트롤을 얻는 방법은 무엇입니까?

muds 2023. 4. 26. 23:47
반응형

사용 가능한 공간을 채우기 위해 WPF의 컨트롤을 얻는 방법은 무엇입니까?

일부 WPF 컨트롤(예:Button) 높이를 지정하지 않으면 컨테이너의 사용 가능한 공간을 모두 만족스럽게 사용하는 것 같습니다.

그리고 어떤 것들은, 지금 당장 사용해야 하는 것들처럼, (멀티라인)TextBox그리고ListBox그들의 내용에 맞는 공간을 차지하는 것에 대해 더 걱정하는 것처럼 보이고, 더 이상은 아닙니다.

만약 당신이 이 사람들을 감옥에 넣으면,UniformGrid사용 가능한 공간에 맞게 확장됩니다.하지만,UniformGrid인스턴스가 모든 상황에 적합한 것은 아닙니다.일부 행을 * 높이로 설정하여 자신과 다른 * 행 사이의 높이를 나누는 그리드가 있는 경우에는 어떻게 해야 합니까?만약 당신이 가지고 있다면?StackPanel그리고 당신은.Label,aList그리고 aButton당신은 어떻게 목록이 라벨과 버튼이 먹지 않는 모든 공간을 차지하도록 할 수 있습니까?

저는 이것이 정말로 기본적인 레이아웃 요구사항이 될 것이라고 생각하지만, 저는 그들이 할 수 있는 공간을 어떻게 채우도록 할 수 있는지 알 수 없습니다(그들을 하나의 공간에 배치).DockPanel그리고 그것을 채우도록 설정하는 것 또한 작동하지 않는 것 같습니다, 왜냐하면,DockPanel하위 컨트롤에 필요한 공간만 차지합니다.

크기를 조정할 수 있는 GUI를 가지고 놀아야 한다면 매우 끔찍할 것입니다.Height,Width,MinHeight,MinWidth기타.

당신은 당신의 것을 묶을 수 있습니까?Height그리고.Width당신이 점유하고 있는 그리드 셀의 속성?아니면 다른 방법이 있을까요?

또한 일부 속성을 설정하여 컨트롤이 사용 가능한 공간을 채우도록 할 수 있습니다.예를 들어 다음과 같이 말할 수 있습니다.

HorizontalContentAlignment="Stretch"

컨트롤의 내용을 수평으로 펼칩니다.또는 다음과 같이 말할 수 있습니다.

HorizontalAlignment="Stretch"

컨트롤 자체가 부모를 채우기 위해 수평으로 늘어나도록 강제합니다.

에서 파생된 각 컨트롤은 다음에서 수행되는 고유한 레이아웃 로직을 구현합니다.Measure()그리고.Arrange():

  • Measure()패널 및 패널의 각 하위 크기를 결정
  • Arrange()각 컨트롤이 렌더링하는 사각형을 결정합니다.

의 마지막 자식이 나머지 공간을 채웁니다.다음을 설정하여 이 동작을 사용하지 않도록 설정할 수 있습니다.LastChild에 대한 재산.false.

는 각 어린이에게 원하는 크기를 물어본 다음 쌓습니다.스택 패널이 호출합니다.Measure()각각의 아이들에게, 사용 가능한 크기:Infinity아이가 원하는 크기를 사용합니다.

A은(는) 사용 가능한 모든 공간을 차지하지만 각 어린이를 원하는 크기로 설정한 다음 셀에 중앙에 배치합니다.

다음에서 도출하여 자체 레이아웃 로직을 구현할 수 있습니다.Panel그런 다음 우선 순위가 결정됩니다.MeasureOverride()그리고.ArrangeOverride().

간단한 예는 이 문서를 참조하십시오.

글을 올린 직후에 제가 알게 된 것이 가장 창피한 방법입니다.:)

스택 패널의 모든 구성원은 요청된 최소 크기만 채울 것으로 보입니다.

도킹 패널에서 잘못된 순서로 도킹했습니다.TextBox 또는 ListBox가 정렬 없이 도킹된 유일한 항목이거나 마지막으로 추가된 항목인 경우 나머지 공간을 원하는 대로 채웁니다.

좀 더 우아한 방법으로 처리하고 싶지만, 그렇게 하면 됩니다.

수평 정렬 및 수직 정렬 레이아웃 속성을 사용합니다.요소에 필요한 공간보다 더 많은 공간이 사용 가능할 때 요소가 부모 내부에 있는 공간을 사용하는 방법을 제어합니다.

예를 들어, 스택 패널의 너비는 가장 넓은 요소의 너비와 같습니다.그래서, 모든 더 좁은 요소들은 약간의 여분의 공간을 가지고 있습니다.선형 특성은 하위 요소가 추가 공간에서 수행하는 작업을 제어합니다.

두 속성의 기본값은 모두 확장이므로 하위 요소는 사용 가능한 모든 공간을 채우도록 확장됩니다.추가 옵션에는 수평 정렬의 경우 왼쪽, 중앙 및 오른쪽, 수직 정렬의 경우 위쪽, 중앙 및 아래쪽이 포함됩니다.

xaml에서 SizeChanged="OnSizeChanged"를 사용하고 뒤에 있는 코드에서 원하는 크기를 설정합니다.

private void OnSizeChanged(object sender, SizeChangedEventArgs e)
        {
            TheScrollViewer.Height = MainWin.Height - 100;
        }

장기적으로는 당신에게 더 좋을 것입니다.관리자가 와서 "좀 더 크게"라고 물으면 오후 내내 레이아웃 제어 장치를 사용하여 작업을 수행할 수 없습니다.또한 당신은 왜 오후를 그것을 작동시키기 위해 노력했는지 설명할 필요가 없을 것입니다.

언급URL : https://stackoverflow.com/questions/36108/how-to-get-controls-in-wpf-to-fill-available-space

반응형