스택 패널에서 항목을 정렬 하시겠습니까?
수평 지향 StackPanel에 2 개의 컨트롤을 가질 수 있는지 궁금해서 올바른 항목을 StackPanel의 오른쪽에 도킹해야합니다.
다음을 시도했지만 작동하지 않았습니다.
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
위의 스 니펫에서 버튼을 StackPanel의 오른쪽에 도킹하고 싶습니다.
참고 : Grid 등이 아닌 StackPanel로 수행해야합니다.
당신은 이것을 달성 할 수 있습니다 DockPanel
:
<DockPanel Width="300">
<TextBlock>Left</TextBlock>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
차이점은 a StackPanel
는 자식 요소를 세로 또는 가로 로 한 줄로 정렬 하는 반면, a DockPanel
는 자식 요소를 서로에 대해 가로 또는 세로로 정렬 할 수있는 영역을 정의한다는 것입니다 ( Dock
속성에 따라 요소의 위치가 다른 요소에 비해 변경됨) 와 같은 정렬 속성 (예 :) HorizontalAlignment
은 부모 요소를 기준으로 요소의 위치를 변경합니다.
최신 정보
주석에서 지적했듯이의 FlowDirection
속성을 사용할 수도 있습니다 StackPanel
. @ D_Bester 's answer를 참조하십시오 .
요 설정된 수 FlowDirection
의 Stack panel
행 RightToLeft
과 모든 항목이 우측으로 배향한다.
이 질문에 우연히 사람들을 위해, 여기 레이아웃을 달성하는 방법은 다음 과 를 Grid
:
<Grid>
<TextBlock Text="Server:"/>
<TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>
창조
Server: http://127.0.0.1
내가 원하는 방식으로 DockPanel을 사용 하여이 작업을 수행 할 수 없었고 StackPanel의 흐름 방향을 뒤집는 것은 번거 롭습니다. 그리드를 사용하는 것은 내부 항목이 런타임에 숨겨져 디자인 타임에 총 열 수를 알 수 없으므로 옵션이 아닙니다. 내가 생각해 낼 수있는 가장 좋고 간단한 해결책은 다음과 같습니다.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<!-- Right aligned controls go here -->
</StackPanel>
</Grid>
이로 인해 StackPanel 내부의 컨트롤은 디자인 및 런타임에 컨트롤 수에 관계없이 사용 가능한 공간의 오른쪽에 정렬됩니다. 예이! :)
이것은 나를 위해 완벽하게 작동합니다. 오른쪽에서 시작하기 때문에 버튼을 먼저 넣으십시오. FlowDirection이 문제가되면 주위에 StackPanel을 추가하고 해당 부분에 FlowDirection = "LeftToRight"를 지정하십시오. 또는 관련 컨트롤에 FlowDirection = "LeftToRight"를 지정하십시오.
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" FlowDirection="RightToLeft">
<Button Width="40" HorizontalAlignment="Right" Margin="3">Right</Button>
<TextBlock Margin="5">Left</TextBlock>
<StackPanel FlowDirection="LeftToRight">
<my:DatePicker Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />
</StackPanel>
<my:DatePicker FlowDirection="LeftToRight" Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />
</StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Left" />
<Button Width="30" Grid.Column="1" >Right</Button>
</Grid>
Windows 10의 경우 스택 패널 대신 relativePanel을 사용하고
relativepanel.alignrightwithpanel = "true"
포함 된 요소
레이블이 세로 스택 패널의 중앙에있는 것과 같은 문제가 발생하는 경우 전체 너비 컨트롤을 사용해야합니다. 너비 속성을 삭제하거나 내부 정렬을 허용하는 전체 너비 컨테이너에 단추를 넣으십시오. WPF는 컨테이너를 사용하여 레이아웃을 제어하는 것입니다.
<StackPanel Orientation="Vertical">
<TextBlock>Left</TextBlock>
<DockPanel>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
</StackPanel>
이게 도움이 되길 바란다.
Maybe not what you want if you need to avoid hard-coding size values, but sometimes I use a "shim" (Separator) for this:
<Separator Width="42"></Separator>
참고URL : https://stackoverflow.com/questions/2023201/align-items-in-a-stack-panel
'programing tip' 카테고리의 다른 글
SVN은 커밋 전에 삭제를 취소합니다. (0) | 2020.06.28 |
---|---|
캡슐화 vs 추상화? (0) | 2020.06.27 |
Rails에서 모델 속성을 어떻게 발견합니까? (0) | 2020.06.27 |
오라클에서 RANK ()와 DENSE_RANK () 함수의 차이점은 무엇입니까? (0) | 2020.06.27 |
'sudo gem install'또는 'gem install'및 gem 위치 (0) | 2020.06.27 |