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

时间:2011-09-15 14:26:39

标签: .net wpf xaml

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

<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中的水平StackPanel),包括Label,Textbox和属于一起的按钮。

StackPanels获得属性HorizontalAlignment="Stretch",以便他们使用Grid单元格中的完整空间,这没关系。

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

当前行为

  • 标签没有宽度占据content中文本所需的空间,目前正好。
  • 文本框具有最小宽度,当我用文本填充时,文本框会变大,
  • 按钮位于Texbox的右侧,当TextBox变大时移动到右侧,当它移到StackPanel外时消失。

通缉行为

  • 标签没有宽度占据content中文本所需的空间,目前正好。
  • Button应该有一个固定的宽度(没问题),并且应该粘贴到我的StackPanel的右边框,这不起作用
  • TextBox应该使用其间的空间而不是更多,即使填充的文字多于适合的文本。

我的TextBox是否有类似“max”属性的东西依赖于StackPanel的大小?

2 个答案:

答案 0 :(得分:4)

谢谢你。我没有时间尝试,所以我不确定这是否有用。

您是否尝试使用最后一次子填充设置为true的DockPanel而不是StackPanel?如果将标签向左停靠,按钮向右停靠。然后确保文本框是dockpanel的最后一个子元素,我认为如果其Horizo​​ntalAlignment设置为stretch,则文本框的大小将填充剩余空间。

答案 1 :(得分:0)

为了完整性,这里是我用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"和{{1}的项目并且作为最后一项,放置一个应该占用剩余空间的项目。 (最后一个元素似乎不需要属性DockPanel.Dock="Right",如果它存在与否,我看不出差异。)