alignment堆叠面板中的项目?
我想知道是否可以在一个水平面向的StackPanel中有两个控件,以便正确的项目应该停靠在StackPanel的右侧。
我尝试了以下,但它没有工作:
<StackPanel Orientation="Horizontal"> <TextBlock>Left</TextBlock> <Button Width="30" HorizontalAlignment="Right">Right<Button> </StackPanel>
在上面的代码片段中,我想将button停靠在StackPanel的右侧。
注意:我需要使用StackPanel来完成,而不是Grid等。
你可以用DockPanel
来实现这个function:
<DockPanel Width="300"> <TextBlock>Left</TextBlock> <Button HorizontalAlignment="Right">Right</Button> </DockPanel>
不同之处在于,一个StackPanel
会将子元素StackPanel
一行 (垂直或水平),而一个DockPanel
定义了一个可以水平或垂直排列子元素的区域 ( Dock
属性改变元素的位置相对于同一容器中的其他元素。alignment属性(如HorizontalAlignment
)可更改元素相对于其父元素的位置。
更新
正如在注释中指出的,你也可以使用StackPanel
的FlowDirection
属性。 看@ D_Bester的答案 。
哟可以将Stack panel
FlowDirection
设置为RightToLeft
,然后所有的项目将alignment到右侧。
对于那些绊倒这个问题的人,下面是如何用 Grid
实现这个布局:
<Grid> <TextBlock Text="Server:"/> <TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/> </Grid>
创build
Server: http://127.0.0.1
无法像我想要的那样使用DockPanel工作,颠倒StackPanel的stream向是很麻烦的。 使用网格不是一个选项,因为它内部的项目可能会在运行时被隐藏,因此我不知道devise时的总列数。 我能想到的最好和最简单的解决scheme是:
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <StackPanel Grid.Column="1" Orientation="Horizontal"> <!-- Right aligned controls go here --> </StackPanel> </Grid>
这将导致StackPanel内部的控件与可用空间的右侧alignment,而不pipe控件的数量是多less(在devise和运行时)。 好极了! 🙂
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="Left" /> <Button Width="30" Grid.Column="1" >Right</Button> </Grid>
这对我来说是完美的。 从右侧开始,只需先按下button即可。 如果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>
对于Windows 10使用relativePanel而不是堆栈面板,并使用
relativepanel.alignrightwithpanel = “真”
为包含的元素。
也许不是你想要的,如果你需要避免硬编码大小的值,但有时我使用“垫片”(分隔符)为此:
<Separator Width="42"></Separator>