76

私は次のコードを持っています:

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

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

4

5 に答える 5

104

StackPanelStackPanels スタックは使用しないでください。明らかな理由で、それらはスタックする方向に整列することを許可しません。Grid次のような列定義で、を使用します。

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
于 2012-08-27T23:36:35.487 に答える
55

これは古いものですが、誰かが私のようにこれに遭遇した場合、ここに簡単な解決策があります。

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

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

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

于 2017-02-15T23:24:42.620 に答える
5

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>

于 2012-08-27T23:36:24.877 に答える
5

ユーザー@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>
    ...
于 2018-02-26T07:48:40.497 に答える
1

サンプルに示されているように、Stackpanel方向タイプをネストされた方法で使用します。グリッド幅は、全幅を実現するために親幅に設定されます。

<StackPanel x:Name="stackBlah" Orientation="Vertical">
    <StackPanel Orientation="Horizontal">
        <Grid Width="{Binding ActualWidth, ElementName=stackBlah}" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
            </Grid.RowDefinitions>

            <StackPanel Grid.Column="0" HorizontalAlignment="Left" >
                <Button Content="Some button" />
            </StackPanel>
            <StackPanel Grid.Column="1" HorizontalAlignment="Right">
                <ToggleSwitch Header="Some toggle" AutomationProperties.Name="ToggleNotifications"/>
            </StackPanel>
        </Grid>
    </StackPanel>
</StackPanel>
于 2021-08-05T14:49:38.960 に答える