Program Tip

WPF의 스택 패널에서 왼쪽과 오른쪽 모두에 컨트롤 정렬

programtip 2020. 12. 11. 19:19
반응형

WPF의 스택 패널에서 왼쪽과 오른쪽 모두에 컨트롤 정렬


다음 코드가 있습니다.

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
        <RadioButton Content="_Programs" 
                    IsChecked="{Binding Path=ProgramBanksSelected}" IsEnabled="{Binding Path=ProgramsEnabled}" Margin="8" />
        <StackPanel>
            <Label Content="Master" Height="28" Name="MasterFileStatus" VerticalContentAlignment="Center"/>
        </StackPanel>
    </StackPanel>
    ...

라디오 버튼은 스택 패널의 왼쪽에 배치되어야하며 (예제를 복잡하게하지 않기 위해 일부 버튼을 제거했습니다) 레이블 (내포 된 StackPanel에 임시로 넣음)은 오른쪽에 있어야합니다.

이미 많은 정렬 조합을 시도했지만 오른쪽에 레이블이 표시되지 않습니다. 이를 위해 무엇을 추가해야합니까?


StackPanel, StackPanels stack을 사용하지 마십시오 . 그들은 명백한 이유로 스택 방향으로 정렬을 허용하지 않습니다. 다음 Grid과 같은 열 정의와 함께를 사용하십시오 .

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>

이것이 오래되었지만 누군가가 나처럼 이것을 발견하면 여기에 간단한 해결책이 있습니다.

새 그리드를 만들고 그 그리드 안에 수평 정렬이 다른 두 개의 스택 패널을 놓습니다.

<Grid>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
        <!--Code here-->
    </StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
        <!--Code here-->
    </StackPanel>
</Grid>

가능한 문제는 이제 추가 처리없이 둘이 서로 겹칠 수 있다는 것입니다.


당신이 설정 한대로 StackPanel로의 방향을 HorizontalHorizontalAlignment속성은 하위 요소에서 작동하지 않습니다. StackPanel추가 컨트롤이 필요한 경우을 유지할 수 있지만 Grid원하는 레이아웃을 구축하기 위해 (다른 것들 중에서)로 전환하는 것이 좋습니다 .

또한 Grid을 사용하면 각 열의 실제 너비를 제어 할 수 있습니다.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50" />
        <ColumnDefinition Width="150" />
    </Grid.ColumnDefinitions>

    <RadioButton
        Grid.Column="0"
        ...
    />

    <Label
        Grid.Column="1"
        ...
    />
</Grid>


사용자 @pasx가 맞습니다. DockPanel을 사용하고 RadioButton을 왼쪽에 도킹하고 레이블이있는 StackPanel을 오른쪽에 도킹해야합니다.

<DockPanel>

    <DockPanel 
        DockPanel.Dock="Top" 
        LastChildFill="False" >

        <RadioButton 
            DockPanel.Dock="Left" 
            Content="_Programs" 
            IsChecked="{Binding Path=ProgramBanksSelected}"
            IsEnabled="{Binding Path=ProgramsEnabled}" 
            Margin="8" />

        <StackPanel
            DockPanel.Dock="Right">

            <Label 
                Content="Master" 
                Height="28" 
                Name="MasterFileStatus" 
                VerticalContentAlignment="Center"/>

        </StackPanel>

    </DockPanel>
    ...

참고 URL : https://stackoverflow.com/questions/12150914/aligning-controls-on-both-left-and-right-side-in-a-stack-panel-in-wpf

반응형