我想知道是否可以在水平方向的 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 的 回答.

其他提示

哟可以设置FlowDirectionStack panelRightToLeft,然后所有的项目将被对准到右侧。

对于那些在这个问题谁绊倒,这里是如何实现这个布局的的一个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>

垂直的StackPanel与左标签随后向右按钮

我希望这有助于。

也许不是你想要的,如果你需要避免硬编码的大小值,但有时我用的是“中间”(隔膜)本:

<Separator Width="42"></Separator>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top