TextBox应该占用可用空间,并且在填充文本时不会增长

我有一个两列两行的网格。 在第一列中,第一行我确实有这个:

<StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
    <StackPanel  Orientation="Horizontal" Height="25" HorizontalAlignment="Stretch">
        <Label Content="Text:"/>
        <TextBox Name="TB_Text" HorizontalAlignment="Stretch" MinWidth="120" />
        <Button Name="BT_TextApply" Content="Apply" Width="75" HorizontalAlignment="Right" Click="BT_TextApply_Click" />
    </StackPanel>
</StackPanel>

我有一个“行”(垂直StackPanel内的水平StackPanels)由一个标签,一个文本框和一个属于一个按钮组成。

StackPanels获得了属性HorizontalAlignment="Stretch"以便它们使用Grid单元格内的完整空间,这是可以的。

但是现在我希望我的三个元素也可以填充StackPanel的完整可用空间,但我没有得到它的工作。

目前的行为

  • 该标签没有宽度,占据了content所需的空间,目前这还不错。
  • 当我用文本填充文本框时,文本框具有最小宽度并变大,
  • 该按钮位于Texbox的右侧,当TextBox变大时向右移动,当它移动到StackPanel之外时消失
  • 想要的行为

  • 该标签没有宽度,占据了content所需的空间,目前这还不错。
  • 按钮应该有一个固定的宽度(没问题),并应该坚持我的StackPanel的右边界,这是行不通的
  • TextBox应该使用中间的其余空间,而不是更多,即使填充的文本多于适合的内容。
  • 有没有像我的TextBox依赖StackPanel大小的“最大”属性?


    谢谢stema。 我没有时间去尝试,所以我不确定这是否会起作用。

    而不是一个StackPanel,你有没有尝试过使用DockPanel和最后一个孩子填充设置为true? 如果您将标签停靠在左侧并按下右侧的按钮。 然后确保文本框是dockpanel的最后一个子元素,如果Horizo​​ntalAlignment设置为伸展,我认为文本框的大小会填充剩余空间。


    为了完整起见,我使用Josh的答案提出了解决方案:

    <StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
        <DockPanel  Height="25" HorizontalAlignment="Stretch" LastChildFill="True">
            <Label Content="Text:" DockPanel.Dock="Left"/>
            <Button Name="BT_TextApply" Content="Apply" Width="75" DockPanel.Dock="Right" Click="BT_TextApply_Click" />
            <TextBox Name="TB_Text"/>
        </DockPanel>
    </StackPanel>
    

    重要的部分是: DockPanel需要属性LastChildFill="True" ,然后列出DockPanel中应该“停靠”某处并告诉它们停靠DockPanel.Dock="Left"DockPanel.Dock="Right"以及作为最后一项,放置一个应占据剩余空间的地方。 ( HorizontalAlignment="Stretch"属性似乎不是最后一个元素所需要的,如果它存在或不存在,我不会看到差异。)

    链接地址: http://www.djcxy.com/p/50067.html

    上一篇: TextBox should occupy available space and not grow when filled with text

    下一篇: WPF Container: equal width for elements but with spacing between them