【问题标题】:One button on one side and others on other side of StackPanelStackPanel 一侧的一个按钮和另一侧的其他按钮
【发布时间】:2025-12-13 08:55:01
【问题描述】:

我正在开发一个 WPF 应用程序。我的 xaml 文件中有一个StackPanel。在 StackPanel 中有三个按钮。问题是所有按钮都在左侧或右侧。我想要的是一个按钮是一个左侧,两个按钮在右侧。

<StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" >
    <Button Content="Open"/>
    <Button Content="Close"/>
    <Button Content="Help"/>
</StackPanel>

this的输出是这样的。

如您所见,左侧有很多空间。我希望我的帮助按钮位于最左侧,而关闭和打开位于最右侧。我想我可以通过实现一个网格或类似的东西来做到这一点,但我想问一下我是否可以只使用堆栈面板来做到这一点。

【问题讨论】:

    标签: c# wpf xaml stackpanel


    【解决方案1】:

    StackPanel 无法做到这一点,但您没有“必须”使用Grid

    您可以使用DockPanel 作为折衷方案

    <DockPanel LastChildFill="False">
      <Button Content="Help" DockPanel.Dock="Left" />
      <Button Content="Close" DockPanel.Dock="Right" />
      <Button Content="Open" DockPanel.Dock="Right" />
    </DockPanel>
    

    LastChildFill="False" 将确保您最后添加的控件不会“填满”所有剩余空间,从而为您提供所需的外观。

    【讨论】:

    • 在 stackPanel 中执行此操作?
    • @FaisalHafeez 不要使用DockPanel 代替StackPanel。这是最好的解决方案。
    • @FaisalHafeez,不,它代替了StackPanel。你必须放开StackPanel
    • 好的,还有一个场景。如果我想要左侧两个按钮,右侧两个按钮怎么办?
    • 用 DockPanel.Dock="Left" 添加新按钮
    【解决方案2】:

    您需要为此使用Grid

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
    
        <Button Grid.Column="0" Content="Help"/>
        <Button Grid.Column="1" Content="Close"/>
        <Button Grid.Column="2" Content="Open"/>
    </Grid>
    

    【讨论】:

    • 我想用 StackPanel 来做这件事。所以第一个问题是“这可能吗?”
    • @FaisalHafeez,这对于堆栈面板是不可能的。根据定义,堆栈面板 stacks 其子级。
    • 值得注意的是,如果没有显式覆盖,这将导致“帮助”按钮伸出,填充可用空间。
    • @DanPuzey,不错的补充。非常感谢!
    • 是的,而且有时我通常只为“帮助”按钮添加一个新列,因为那时我们可以使用IsSharedSizeScope 设置所有三个按钮列以保持统一的按钮大小。
    最近更新 更多