사용 가능한 공간을 채우기 위해 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
'programing' 카테고리의 다른 글
하루 중 시간이 아닌 시간 지속 시간으로 작업 (0) | 2023.04.26 |
---|---|
WPF 데이터 그리드 행을 두 번 클릭 이벤트를 프로그래밍 방식으로 (0) | 2023.04.26 |
열 1과 열 A를 동시에 동결 (0) | 2023.04.26 |
프레임워크의 런타임 대상을 찾을 수 없습니다.대상 런타임 중 하나와 호환되는 NETCoreApp= v1 (0) | 2023.04.26 |
비동기식으로 디스패치된 블록이 완료될 때까지 기다리는 방법은 무엇입니까? (0) | 2023.04.26 |