Mic*_*ers 59 wpf layout xaml alignment stackpanel
我有以下代码:
<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>
...
Run Code Online (Sandbox Code Playgroud)
单选按钮应放在堆栈面板的左侧(我删除了一些按钮,不会使示例混乱),标签(我暂时放在嵌套的StackPanel中)应位于右侧.
我已经尝试了许多对齐组合,但我无法在右侧获得标签.我应该添加什么来实现这一目标?
H.B*_*.B. 79
只要不使用StackPanel,StackPanels 堆栈.出于显而易见的原因,它们不允许在它们堆叠的方向上对齐.使用a Grid,列定义如下:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
小智 31
即使这是旧的,如果有人像我一样遇到这个,这是一个简单的解决方案.
创建一个新网格并在该网格内部放置两个具有不同水平对齐的堆栈面板.
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<!--Code here-->
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<!--Code here-->
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
可能的问题是,现在没有额外的处理,两者可能相互重叠.
当您将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>
Run Code Online (Sandbox Code Playgroud)
用户@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>
...
Run Code Online (Sandbox Code Playgroud)