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

  • 本文关键字:文本 填充 空间 .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)由一个标签,一个文本框和一个按钮,属于在一起。

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

但是现在我想让我的三个元素也填满StackPanel的完整可用空间,但是我没有让它工作。

当前行为

  • 标签没有宽度,它占用了content中文本需要的空间,这在目前很好。
  • 文本框有一个最小宽度,当我填充文本时它会变大,
  • 按钮位于文本框的右侧,当文本框变大时向右移动,当它移出StackPanel
  • 时消失。
<

希望行为/strong>

  • 标签没有宽度,它占用了content中文本需要的空间,这是目前很好的。
  • 按钮应该有一个固定的宽度(没有问题),应该坚持到我的StackPanel的右边框,这是不工作
  • 文本框应该使用中间的剩余空间,而不是更多的空间,即使填充的文本超出了范围。

是否有像"max"属性为我的文本框取决于StackPanel的大小?

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

而不是StackPanel,你有没有尝试使用DockPanel最后一个子填充设置为真?如果你将标签停靠在左边,按钮停靠在右边。然后确保文本框是dockpanel的最后一个子元素,我认为如果文本框的HorizontalAlignment设置为stretch,那么文本框的大小将填充剩余的空间。

为了完整起见,下面是我用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"似乎不需要最后一个元素,我看不出它是否存在差异。)

最新更新