문제

올바른 항목이 StackPanel의 오른쪽에 도킹되도록 가로 방향 StackPanel에 2개의 컨트롤이 있을 수 있는지 궁금합니다.

다음을 시도했지만 작동하지 않았습니다.

<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>

차이점은 StackPanel 하위 요소를 한 줄로 정렬합니다. (수직 또는 수평) 반면 DockPanel 하위 요소를 서로 상대적으로 가로 또는 세로로 정렬할 수 있는 영역을 정의합니다. (그만큼 Dock 속성은 동일한 컨테이너 내의 다른 요소를 기준으로 요소의 위치를 ​​변경합니다.다음과 같은 정렬 속성 HorizontalAlignment, 상위 요소를 기준으로 요소의 위치를 ​​변경합니다.

업데이트

의견에서 지적했듯이 다음을 사용할 수도 있습니다. FlowDirection a의 속성 StackPanel.@D_Bester의 내용을 참조하세요. 답변.

다른 팁

당신은 설정할 수 있습니다 FlowDirectionStack panel 에게 RightToLeft, 그런 다음 모든 항목이 오른쪽에 정렬됩니다.

이 질문을 우연히 발견 한 사람들을 위해이 레이아웃을 달성하는 방법은 다음과 같습니다. ~와 함께Grid:

<Grid>
    <TextBlock Text="Server:"/>
    <TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>

생성

Server:                                                                   http://127.0.0.1

내가 원하는 방식으로 도크 패널을 사용 하여이 작업을 수행 할 수 없었고 스택 패널의 흐름 방향을 되돌리는 것은 번거 롭습니다. 그리드를 사용하는 것은 런타임에 숨겨 질 수 있으므로 설계 시간에 총 열의 수를 알지 못하므로 옵션이 아닙니다. 내가 생각해 낼 수있는 가장 단순한 솔루션은 다음과 같습니다.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="1" Orientation="Horizontal">
        <!-- Right aligned controls go here -->
    </StackPanel>
</Grid>

이로 인해 스택 패널 내부의 컨트롤이 설계 및 런타임시 컨트롤 수에 관계없이 사용 가능한 공간의 오른쪽에 정렬됩니다. 예! :)

이것은 나를 위해 완벽하게 작동합니다. 오른쪽에서 시작하여 버튼을 먼저 넣으십시오. FlowDirection이 문제가되면 그 주위에 스택 패널을 추가하고 해당 부분에 대해 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"

포함 된 요소의 경우.

수직 스택 패널에서 레이블이 중앙에 위치했던 것과 같은 문제가 발생하는 경우 전체 너비 컨트롤을 사용해야 합니다.Width 속성을 삭제하거나 내부 정렬을 허용하는 전체 너비 컨테이너에 버튼을 넣으세요.WPF는 컨테이너를 사용하여 레이아웃을 제어하는 ​​것입니다.

<StackPanel Orientation="Vertical">
    <TextBlock>Left</TextBlock>
    <DockPanel>
        <Button HorizontalAlignment="Right">Right</Button>
    </DockPanel>
</StackPanel>

왼쪽 레이블과 오른쪽 버튼이 있는 수직 StackPanel

이게 도움이 되길 바란다.

하드 코딩 크기 값을 피해야한다면 원하는 것이 아닐 수도 있지만 때로는 "Shim"(분리기)을 사용합니다.

<Separator Width="42"></Separator>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top