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 )可更改元素相对于其父元素的位置。

更新

正如在注释中指出的,你也可以使用StackPanelFlowDirection属性。 看@ 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>