对齐堆栈面板中的项目?
-
19-09-2019 - |
题
我想知道是否可以在水平方向的 StackPanel 中拥有 2 个控件,以便正确的项目应该停靠在 StackPanel 的右侧。
我尝试了以下方法,但没有成功:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
在上面的代码片段中,我希望将 Button 停靠在 StackPanel 的右侧。
笔记:我需要用 StackPanel 来完成,而不是 Grid 等。
解决方案
您可以通过以下方式实现此目的 DockPanel
:
<DockPanel Width="300">
<TextBlock>Left</TextBlock>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
不同的是,一个 StackPanel
将把子元素排列成单行 (垂直或水平)而a DockPanel
定义一个区域,您可以在其中相对于彼此水平或垂直排列子元素 (这 Dock
属性更改元素相对于同一容器内其他元素的位置。对齐属性,例如 HorizontalAlignment
, ,更改元素相对于其父元素的位置)。
更新
正如评论中指出的,您还可以使用 FlowDirection
的财产 StackPanel
. 。请参阅@D_Bester 的 回答.
其他提示
哟可以设置FlowDirection
的Stack panel
到RightToLeft
,然后所有的项目将被对准到右侧。
对于那些在这个问题谁绊倒,这里是如何实现这个布局的与的一个Grid
:
<Grid>
<TextBlock Text="Server:"/>
<TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>
创建
Server: http://127.0.0.1
无法使用我想要一个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中的内部控制被对齐到的可用空间的右侧不管控件的数目 - 无论在设计和运行时。好极了! :)
这完全适用于我。只要把按钮第一,因为你开始就对了。如果的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>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Left" />
<Button Width="30" Grid.Column="1" >Right</Button>
</Grid>
有窗10 使用relativePanel代替堆叠面板,和使用
relativepanel.alignrightwithpanel = “真”
为包含的元素
如果你有像我曾在那里标签是在我的垂直堆叠面板为中心的问题,请确保您使用全宽度的控制。删除Width属性,或者把你的按钮,在全宽的容器,使内部的走线。 WPF是所有有关使用的容器来控制布局。
<StackPanel Orientation="Vertical">
<TextBlock>Left</TextBlock>
<DockPanel>
<Button HorizontalAlignment="Right">Right</Button>
</DockPanel>
</StackPanel>
我希望这有助于。
也许不是你想要的,如果你需要避免硬编码的大小值,但有时我用的是“中间”(隔膜)本:
<Separator Width="42"></Separator>