165

水平方向の StackPanel に 2 つのコントロールを配置して、適切なアイテムを StackPanel の右側にドッキングできるかどうか疑問に思っていました。

次のことを試しましたが、うまくいきませんでした:

<StackPanel Orientation="Horizontal">
    <TextBlock>Left</TextBlock>
    <Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>

上記のスニペットでは、Button を StackPanel の右側にドッキングさせたいと考えています。

注:Gridなどではなく、StackPanelで行う必要があります。

4

9 に答える 9

246

DockPanelあなたは:でこれを達成することができます

<DockPanel Width="300">
    <TextBlock>Left</TextBlock>
    <Button HorizontalAlignment="Right">Right</Button>
</DockPanel>

違いは、aStackPanelは子要素を単一の線(垂直または水平)に配置するのに対し、aDockPanelは子要素を相互に水平または垂直に配置できる領域を定義することですDockプロパティは他の要素に対する要素の位置を変更します)同じコンテナ内の要素。などの配置プロパティはHorizontalAlignment、親要素に対する要素の位置を変更します)。

アップデート

コメントで指摘されているように、のFlowDirectionプロパティを使用することもできますStackPanel。@D_Besterの回答を参照してください。

于 2010-01-07T20:15:15.953 に答える
75

FlowDirectionをから に設定Stack panelするRightToLeftと、すべての項目が右側に揃えられます。

于 2012-06-23T17:38:12.337 に答える
35

この質問に出くわした人のために、このレイアウトを で実現する方法を次に示しGridます。

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

作成します

Server:                                                                   http://127.0.0.1
于 2013-09-13T21:40:06.217 に答える
20

私が望んでいた方法で 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 内のコントロールが使用可能なスペースの右側に配置されます。わーい!:)

于 2017-01-05T08:12:46.160 に答える
7

これは私にとって完璧に機能します。右側から開始するので、ボタンを最初に配置します。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>
于 2017-10-20T15:51:09.713 に答える
5
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Left"  />
    <Button Width="30" Grid.Column="1" >Right</Button>
</Grid>
于 2014-12-31T14:00:32.660 に答える
-8

サイズ値のハードコーディングを避ける必要がある場合は、必要ないかもしれませんが、これには「シム」(セパレーター) を使用することがあります。

<Separator Width="42"></Separator>
于 2012-09-12T22:49:24.217 に答える