私は次のコードを持っています:
<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>
これは古いですが、誰かが私と同じようにこれに出くわした場合、簡単な解決策があります。
新しいグリッドを作成し、そのグリッド内に異なる水平方向の配置を持つ2つのスタックパネルを配置します。
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<!--Code here-->
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<!--Code here-->
</StackPanel>
</Grid>
考えられる問題は、余分な処理を行わないと、2つが互いにオーバーラップする可能性があることです。
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>
ユーザー@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>
...