DockStyle 사용 방법.WPF의 표준 제어 장치를 채우시겠습니까?
, 그에 컨트롤을 , 그 안에 을 줍니다.DockStyle.Fill
주변 패널에 최대 크기를 제공합니다.
WPF에서도 저는 같은 것을 가지고 싶습니다.저는 TabControl을 가지고 있는데, 그 크기가 가능한 한 많은 양식을 채우길 원합니다.리본 컨트롤(RibbonControls Library)을 가지고 있으며, 양식의 나머지 부분은 최대 크기의 TabControl로 채워지길 원합니다.
(Visual Studio의 도킹과 같은 컨트롤을 도킹하고 싶지 않습니다. 단지 오래된 도킹 메커니즘일 뿐입니다.)
WPF는 WinForms의 DockStyle에 해당합니다.채우기:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
이것은 거의 모든 컨트롤에 대한 기본값이므로 일반적으로 WPF 컨트롤이 상위 컨테이너를 채우도록 하기 위해 아무것도 할 필요가 없습니다.그들은 자동으로 그렇게 합니다.이것은 아이들을 최소 크기로 짜지 않는 모든 용기에 해당됩니다.
일반적인 실수
저는 이제 예방하는 몇 가지 일반적인 실수에 대해 설명하겠습니다.HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
예상대로 작동했기 때문입니다.
명시적 높이 또는 폭
한 가지 일반적인 실수는 컨트롤의 너비 또는 높이를 명시적으로 지정하는 것입니다.그래서 만약 당신이 이것을 가지고 있다면:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
너비 및 높이 특성을 제거하기만 하면 됩니다.
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
내장 패널이 컨트롤을 최소 크기로 압착합니다.
또 다른 일반적인 실수는 포함된 패널이 컨트롤을 최대한 꽉 조이는 것입니다.예를 들어 수직 스택 패널은 항상 내용을 수직으로 최대한 작게 압축합니다.
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
다른 패널로 변경하면 다음을 수행할 수 있습니다.
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
또한 높이가 "자동"인 그리드 행 또는 열도 마찬가지로 콘텐츠를 해당 방향으로 압축합니다.
다음은 자녀를 짜지 않는 용기의 예입니다.
- 내용 컨트롤은 자녀를 압축하지 않습니다(경계, 단추, CheckBox, ScrollViewer 등).
- 단일 행 및 열이 있는 그리드
- 크기가 "*"인 행 및 열이 있는 그리드
- DockPanel은 마지막 자식을 압축하지 않습니다.
- TabControl은 내용을 압축하지 않습니다.
아이들을 꼭 껴안는 용기의 예는 다음과 같습니다.
- 스택 패널이 방향으로 조입니다.
- 해당 방향으로 "자동" 크기의 행 또는 열이 압착된 그리드
- DockPanel은 마지막 아이를 제외한 모든 아이를 Dock 방향으로 조입니다.
- TabControl은 헤더를 압축합니다(탭에 표시되는 내용).
명시적 높이 또는 너비가 추가로
다음과 같이 명확한 높이와 너비가 지정된 그리드 또는 독 패널을 몇 번이나 볼 수 있는지 놀랍습니다.
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
일반적으로 패널에 명시적인 높이 또는 너비를 지정하지 않습니다.레이아웃 문제를 진단할 때 첫 번째 단계는 찾을 수 있는 모든 명시적인 높이 또는 너비를 제거하는 것입니다.
창 크기가 내용에 맞게 조정되지 않아야 하는 경우
SizeToContent를 사용하면 콘텐츠가 최소 크기로 압축됩니다.많은 응용 프로그램에서 이 방법은 매우 유용하며 올바른 선택입니다.그러나 내용에 "자연스러운" 크기가 없는 경우에는 SizeToContent를 생략할 수 있습니다.
당신은 그저 말하는 것만으로 당신이 원하는 것을 할 수 있습니다.DockPanel
LastChildFill="True"
그리고 나서 여러분이 필러가 되고 싶은 것을 확실히 하는 것은 사실 마지막 아이입니다!
그리드는 대부분의 작업을 수행할 수 있는 레이아웃의 기본 요소이지만, 일반적으로 가장 바깥쪽 레이아웃 패널에는 도킹 패널이 적합합니다.다음은 psu 문서 코드 예입니다.
<DockPanel LastChildFill="True">
<MyMenuBar DockPanel.Dock="Top"/>
<MyStatus DockPanel.Dock="Bottom"/>
<MyFillingTabControl />
</DockPanel>
컨트롤을 두 줄의 그리드로 감싸기만 하면 됩니다.그리드는 주어진 모든 공간을 자동으로 사용하며, "*" 높이를 지정하여 남은 모든 공간을 차지하도록 행을 정의할 수 있습니다.예제의 첫 번째 행(높이="자동")은 리본에 필요한 만큼의 공간을 차지합니다.도움이 되길 바랍니다.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Ribbon Grid.Row="0" />
<TabPage Grid.Row="1" />
</Grid>
"그리드"를 추가합니다.Row=." 특성은 그리드의 행에 할당되는 그리드의 하위 컨트롤에 대한 특성입니다.그런 다음 그리드는 행 정의에 정의된 대로 하위 크기를 지정합니다.
여기서 여러 가지 방법을 시도했지만 문제를 해결할 수 없습니다. (다른 컨트롤 채우기)
찾을 때까지
<Name_Control Height="auto" Width="auto"/>
//default
//HorizontalAlignment="Stretch"
//VerticalAlignment="Stretch"
예:
//UserControl:
<UserControl Name="UC_Test" Height="auto" Width="auto" />
//Grid:
<Grid Name="Grid_test" Grid.ColumnSpan="2" Grid.Row="2" />
//Code:
Grid_test.Children.Add(UC_Test);
간편한 디자인을 위해
<UserControl Name="UC_Test" Height="100" Width="100" />
//Code
Grid_test.Children.Add(UC_Test);
UC_Test.Width = Double.NaN;
UC_Test.Height = Double.NaN;
언급URL : https://stackoverflow.com/questions/3216020/how-to-use-dockstyle-fill-for-standard-controls-in-wpf
'programing' 카테고리의 다른 글
"는 " "의 대체어입니까? (0) | 2023.05.07 |
---|---|
NSString을 분할하여 하나의 특정 조각에 액세스합니다. (0) | 2023.05.07 |
유형이 있는 날짜보다 오래된 데이터 검색ORM (0) | 2023.05.02 |
SQL Azure 테이블 크기 (0) | 2023.05.02 |
보관 파일을 제출할 때 Xcode 6이 충돌합니다. (0) | 2023.05.02 |