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

StackOverflow https://stackoverflow.com/questions/36108

  •  09-06-2019
  •  | 
  •  

문제

일부 WPF 컨트롤(예: Button) 높이를 지정하지 않으면 컨테이너에서 사용 가능한 모든 공간을 행복하게 소비하는 것 같습니다.

그리고 지금 당장 사용해야 하는 것과 같은 일부는 (여러 줄) TextBox 그리고 ListBox 내용에 맞게 필요한 공간을 차지하는 것이 더 걱정되는 것 같습니다.

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

나는 이것이 실제로 기본적인 레이아웃 요구 사항이라고 생각하지만 그들이 할 수 있는 공간을 채우도록 하는 방법을 알 수 없습니다(그들을 DockPanel 채우기로 설정해도 작동하지 않는 것 같습니다. DockPanel 하위 컨트롤에 필요한 공간만 차지합니다).

크기 조정 가능한 GUI를 가지고 놀아야 한다면 꽤 끔찍할 것입니다. Height, Width, MinHeight, MinWidth 등.

당신을 묶을 수 있습니까? Height 그리고 Width 당신이 차지하는 그리드 셀에 속성을 부여하시겠습니까?아니면 다른 방법이 있나요?

도움이 되었습니까?

해결책

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

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

의 마지막 아이 DockPanel 남은 공간을 채워줍니다.다음을 설정하여 이 동작을 비활성화할 수 있습니다. LastChild 재산 false.

그만큼 StackPanel 각 어린이에게 원하는 크기를 묻고 쌓아 놓습니다.스택 패널 호출 Measure() 각 어린이에 대해 사용 가능한 크기는 다음과 같습니다. Infinity 그런 다음 아이가 원하는 크기를 사용합니다.

Grid 사용 가능한 모든 공간을 차지하지만 각 하위 항목을 원하는 크기로 설정한 다음 셀 중앙에 배치합니다.

다음에서 파생하여 고유한 레이아웃 논리를 구현할 수 있습니다. Panel 그런 다음 재정의 MeasureOverride() 그리고 ArrangeOverride().

보다 이 기사 간단한 예를 들어 보겠습니다.

다른 팁

컨트롤이 사용 가능한 공간을 채우지 않을 때 강제로 채우도록 설정할 수 있는 몇 가지 속성도 있습니다.예를 들어 다음과 같이 말할 수 있습니다.

HorizontalContentAlignment="Stretch"

...컨트롤의 내용을 강제로 가로로 늘립니다.아니면 다음과 같이 말할 수도 있습니다.

HorizontalAlignment="Stretch"

...컨트롤 자체를 강제로 가로로 늘려 부모를 채웁니다.

글쎄요, 포스팅 직후에 제가 직접 알아냈는데, 그게 가장 당황스러운 방법이에요.:)

StackPanel의 모든 구성원은 단순히 최소 요청 크기를 채우는 것 같습니다.

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

나는 이것을 처리하는 좀 더 우아한 방법을 보고 싶지만 그렇게 될 것입니다.

사용 수평 정렬 그리고 수직 정렬 레이아웃 속성.요소에 필요한 것보다 더 많은 공간을 사용할 수 있는 경우 요소가 상위 내부에 있는 공간을 사용하는 방법을 제어합니다.

예를 들어 StackPanel의 너비는 포함된 가장 넓은 요소만큼 넓습니다.따라서 모든 좁은 요소에는 약간의 여유 공간이 있습니다.정렬 속성은 하위 요소가 추가 공간으로 수행하는 작업을 제어합니다.

두 속성 모두의 기본값은 Stretch이므로 사용 가능한 모든 공간을 채우기 위해 하위 요소가 늘어납니다.추가 옵션에는 왼쪽, 중앙 및 오른쪽이 포함됩니다. 수평 정렬 상단, 중앙, 하단 수직 정렬.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top