如何将文本框宽度与网格中的一组列相匹配?

Posted

技术标签:

【中文标题】如何将文本框宽度与网格中的一组列相匹配?【英文标题】:How to fit textbox width with a set of columns in a grid? 【发布时间】:2012-03-17 23:03:53 【问题描述】:

假设我有一个包含 4 列的网格,并且想在第二列中放置一个文本框并将其跨越到最后一列。我怎样才能使文本框的宽度与最后 3 列一样宽?

我尝试过使用 Borders,但没有成功。

<Grid>
      <Grid.ColumnDefinitions>
           <ColumnDefinition Width="Auto" />
           <ColumnDefinition Width="Auto" />
           <ColumnDefinition Width="Auto" />
           <ColumnDefinition Width="Auto" />
      </Grid.ColumnDefinitions>

      <TextBox Grid.Column="1" Grid.ColumnSpan="3" />
</Grid>

【问题讨论】:

【参考方案1】:

给 TextBox 一些宽度或将 ColumnDefinition 宽度设为 * 而不是 Auto。它一直延伸到最后一列,但由于宽度为 Auto,您无法看到它。

【讨论】:

它不起作用...它不依赖于列宽。我可以将列宽设置为任何值,我只希望我的文本框与最后三列的宽度相同。 @GuilhermeCampos 您需要将所有列定义为Width="*",而不仅仅是TextBox 所在的列。 好吧,正如@Dipesh 和@Rachel 所说的那样。但是 - 由于我不知道的原因 - 它在我的真实代码中不起作用(与其他东西一起),Grid.ColumnSpan 没有按预期工作。我在其他行中已经有其他Textboxes Grid 你知道为什么会发生这种情况吗? @GuilhermeCampos 没有看到你的真实代码是不可能知道的。也许用产生问题的代码的简化示例打开另一个 SO 问题。【参考方案2】:

现在最后 3 列适合文本框,因为宽度是自动的。

  <Grid>
  <Grid.ColumnDefinitions>
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>

  <TextBox Grid.Column="1" Grid.ColumnSpan="3" />
  </Grid>

【讨论】:

需要注意的是,Width为Auto表示"only take up the space needed to render the controls inside these columns",而Width为*表示"split the space evenly between all * sized columns"。因此,Balam 的示例是在 4 列之间平均分配空间,并将 TextBox 拉伸到其中的 3 列,因此 TextBox 的最终宽度将是 Grid 宽度的 3/4。【参考方案3】:

正如Dipesh Bhatt 在他的回答中正确提出的那样,您的问题的解决方案是将 * 或特定的东西作为列的宽度。

在您的示例中发生的情况是列的自动宽度显示“需要尽可能多的宽度”,因此它占用的宽度非常小,因为空文本框需要非常非常小的宽度,这几乎不可见。

列的*宽度表示“获取任何可用空间”,这将增加列的宽度,从而为文本框提供更多空间。

这意味着你已经实现了你想要的,但由于列的宽度最小,它几乎不可见。

【讨论】:

作为一个额外的说明 - 你的文本框应该有一个“拉伸”的水平对齐。它应该是默认的,但以防万一...... @Liz:同意。没有提及,因为这是默认行为。

以上是关于如何将文本框宽度与网格中的一组列相匹配?的主要内容,如果未能解决你的问题,请参考以下文章

如何按行将函数应用于 PySpark 数据帧的一组列?

如何在具有(流体高度)的响应框中垂直居中文本[重复]

匹配表格列宽的文本框

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

使用匹配的文本框和列值过滤表

表单高度和宽度的测量方式与 TextBox 高度不同