[wpf] 스택 패널에서 항목을 정렬 하시겠습니까?

가로 방향 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를 참조하십시오 .


답변

요 설정된 수 FlowDirectionStack panelRightToLeft과 모든 항목이 우측으로 배향한다.


답변

이 질문에 우연히 사람들을 위해, 여기 레이아웃을 달성하는 방법은 다음 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”

포함 된 요소