我想知道在水平导向的StackPanel中是否可以有2个控件,以便正确的项目应该停靠在StackPanel的右侧。
我尝试了以下但是没有用:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
在上面的代码片段中,我希望Button停靠在StackPanel的右侧。
注意:我需要使用StackPanel,而不是Grid等。
答案 0 :(得分:196)
您可以使用DockPanel
:
<DockPanel Width="300">
<TextBlock>Left</TextBlock>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
不同之处在于StackPanel
will arrange child elements into single line(垂直或水平)而DockPanel
defines an area where you can arrange child elements either horizontally or vertically, relative to each other(Dock
属性会更改元素相对于同一容器中其他元素的位置。属性(例如HorizontalAlignment
)会更改元素相对于其父元素的位置。
<强>更新强>
正如评论中所指出的,您还可以使用FlowDirection
的{{1}}属性。请参阅@ D_Bester的answer。
答案 1 :(得分:60)
哟可以将FlowDirection
的{{1}}设置为Stack panel
,然后所有项目都会与右侧对齐。
答案 2 :(得分:25)
对于那些偶然发现这个问题的人,以下是如何使用 Grid
实现此布局:
<Grid>
<TextBlock Text="Server:"/>
<TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>
创建
Server: http://127.0.0.1
答案 3 :(得分:17)
无法按照我想要的方式使用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内部的控件与可用空间的右侧对齐,而不管控件的数量 - 无论是在设计还是运行时。好极了! :)
答案 4 :(得分:4)
这对我来说很有效。只需按下按钮即可,因为您从右侧开始。如果FlowDirection成为一个问题,只需在它周围添加一个StackPanel并指定FlowDirection =&#34; LeftToRight&#34;对于那部分。或者只需指定FlowDirection =&#34; LeftToRight&#34;对于相关控制。
<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>
答案 5 :(得分:2)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Left" />
<Button Width="30" Grid.Column="1" >Right</Button>
</Grid>
答案 6 :(得分:0)
用于Windows 10 使用relativePanel而不是stack panel,并使用
relativepanel.alignrightwithpanel = “真”
包含的元素。
答案 7 :(得分:0)
如果遇到类似我在垂直堆栈面板中居中放置标签的问题,请确保使用全角控件。删除Width属性,或将按钮放在允许内部对齐的全角容器中。 WPF就是使用容器来控制布局。
<StackPanel Orientation="Vertical">
<TextBlock>Left</TextBlock>
<DockPanel>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
</StackPanel>
Vertical StackPanel with Left Label followed by Right Button
我希望这会有所帮助。
答案 8 :(得分:-7)
如果您需要避免硬编码大小值,可能不是您想要的,但有时我会使用“垫片”(分隔符):
<Separator Width="42"></Separator>