web-dev-qa-db-ja.com

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に一時的に配置する)を右側に配置する必要があります。

すでに多くの配置の組み合わせを試しましたが、右側のラベルを取得できません。これを達成するには何を追加する必要がありますか?

56
Michel Keijzers

StackPanelStackPanelsstackを使用しないでください。明らかな理由により、スタックする方向のアライメントは許可されません。 Grid を使用し、次のような列定義を使用します。

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

これは古いですが、誰かが私と同じようにこれに出くわした場合、簡単な解決策があります。

新しいグリッドを作成し、そのグリッド内に異なる水平方向の配置を持つ2つのスタックパネルを配置します。

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

考えられる問題は、余分な処理を行わないと、2つが互いにオーバーラップする可能性があることです。

27
Chris

StackPanelの向きをHorizontalに設定したため、HorizontalAlignmentプロパティは子要素では機能しません。追加のコントロールが必要な場合はStackPanelを保持できますが、Gridに切り替えて(特に)必要なレイアウトを作成することをお勧めします。

また、Gridを使用すると、各列の実際の幅を制御できます。

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

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

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

ユーザー@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>
    ...
3
Alex34758