WPF:将控件高度设置为填充网格行高

Posted

技术标签:

【中文标题】WPF:将控件高度设置为填充网格行高【英文标题】:WPF: Set Control Height to Fill Grid Row Height 【发布时间】:2013-02-02 23:43:05 【问题描述】:

具有 3 行和 3 列的 WPF 网格控件。有问题的行高设置为自动。在前两个单元格中,我有两个具有动态高度的控件。在第三个单元格中,我有另一个控件,我希望将其自动设置为在 Grid 单元格中进行拉伸。我试过VerticalAlignment="Stretch",但这只是将网格行高度设置为等于控件的高度。我在这里有什么选择?

【问题讨论】:

【参考方案1】:

不确定您在单元格 3 中使用的是哪种控件,但大多数 WPF 控件会自动拉伸以适应网格单元格。网格的行高将由单元格 1 和 2 中控件的高度设置。

如果您使用某种自定义控件,其中高度的默认行为不同,您可以设置Height="Auto"

如果这也不起作用,您可以进行数据绑定以获取单元格 1 或 2 中控件的实际高度。将单元格 3 中控件的 Height 属性设置为以下内容:

Height="Binding ActualHeight, ElementName=MyControlNameFromCell1, Mode=OneWay"

编辑

另一种可能更可靠的方法是对行的高度进行数据绑定。因此,不要使用"Auto" 作为行高,而是使用上面显示的数据绑定。

【讨论】:

谢谢。单元格 3 中的控件是 TabControl,而单元格 1 和单元格 2 中有网格。问题是 TabControl 的内容(以及 TableControl 本身)都比两个 Grid 都大,所以整行都采用 TabControl 的高度。我想要的是 TabControl 获取网格(其中较大的一个)的高度,并在其内部引入一个滚动条以显示其所有内容。我已经在 TabControl 中添加了一个 ScrollViewer,但是由于 TabControl 变得足够大以显示其所有内容,因此 ScrollViewer 仍然无用。 更新。绑定确实有效。问题是我在 TabControl 的属性中有 Margin="3" 以某种方式导致它变得与其内容所需的一样大。删除 Margin 并添加您上面提到的 Height 绑定似乎可以解决问题。

以上是关于WPF:将控件高度设置为填充网格行高的主要内容,如果未能解决你的问题,请参考以下文章

xamarin.forms以编程方式将行高设置为0会导致不需要的空间

设置“自动”时获取 WPF 控件高度

为没有滚动条的 100% 高度网格设置边距或填充 [重复]

WPF 高度/宽度

如何基于二维数组填充 WPF 网格

tableView 未设置自动行高