【问题标题】:Align Left and fill space in DockPanel在 DockPanel 中左对齐并填充空间
【发布时间】:2026-01-27 07:00:01
【问题描述】:

我有一个 DockPanel,其中包含一个具有固定宽度的标签和一个具有 Min 和 MaxWidth 的 TextBox。我想将 TextBox 向左对齐并让它拉伸到它的 MaxWidth 并让它收缩到它的 MinWidth (例如,如果调整了 Window 的大小)像这样:

面板:

<DockPanel LastChildFill="True">
   <Label Content="Fixed Width"  DockPanel.Dock="Left" />
   <TextBox MinWidth="80" MaxWidth="250" DockPanel.Dock="Left" HorizontalAlignment="Left" />
 </DockPanel>

但是,这只会将 TextBox 对齐到左侧。如果我省略了 Horizo​​ntalAlignment 它居中。 我怎样才能实现屏幕截图中的效果?

请注意,我不想使用 Grid,因为我需要将 TextBox 包装在 Label 下方的某个位置(我将使用 Trigger 当前更改 Dock 属性来执行此操作)。

【问题讨论】:

    标签: wpf xaml dockpanel


    【解决方案1】:

    看看这个解决方案:https://*.com/a/13040678/4625433

    您需要将 MinWidth="80" 从 TextBox 移动到 LeftStretchPanel。

    <ScrollViewer HorizontalScrollBarVisibility="Auto">
        <DockPanel LastChildFill="True" Background="Yellow">
            <Label Content="Fixed Width" Background="Red" />
            <local:LeftStretchPanel MinWidth="80">
                <TextBox MaxWidth="250" Background="Blue" />
            </local:LeftStretchPanel>
        </DockPanel>
    </ScrollViewer>
    

    【讨论】:

    • 这有效,但仅适用于 ScrollViewer。如果我忽略它,则停靠下面的文本框不再起作用,因为面板似乎为文本框计算了 0 高度
    • 即使没有&lt;local:LeftStretchPanel&gt;,如果我只更改 TextBox 停靠位置,也不会发生任何事情。你有没有改变两个对接?如果您仍然需要这方面的帮助,您能否分享一个我可以使用的简短示例?