WPF代码中的自动高度

114

我该如何在C#代码中将WPF控件的Height属性值设置为"Auto"?

<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>

我想在代码后台中复制这种行为。 有什么想法吗?

3个回答

171

也许 这个链接 可以帮助你。

有时,你可能想在代码中以编程方式将 WPF 元素的高度或宽度设置为自动。要做到这一点,只需使用 Double.NaN(非数字)值。

例如,在 C# 中:

this.txtName.Width = Double.NaN;


1
在我的情况下不起作用。但是我通过behaviors(Expression Blend 4.0库)来改变高度宽度。 - Franck
1
链接已失效,但您可以在此处访问存档版本。 - akjoshi
3
尼姆罗德的回答更加明确易懂。 - David
1
我觉得 Nimrod 的回答最干净,现在应该成为被接受的答案(不确定过去是否可能使用 GridLength.Auto)。还有 GridLength.Star 可以填充剩余区域。 - Wolfgang Schreurs
1
@WolfgangSchreurs,但这似乎是一个更一般性的答案。另一个答案在 Height 实际上只是一个 double 的情况下不起作用。 - StayOnTarget
显示剩余2条评论

120

你可以使用

RowDefinition rd = new RowDefinition();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add(rd);

8
这个答案和被接受的答案有什么不同吗?如果没有的话,这应该成为不规避框架的最佳答案。 - estebro
3
根据 Reflector 的资料,GridLength.Auto 是新的 GridLength(1.0, GridUnitType.Auto);因此,它并不完全等同于被认可的答案,但更易读。 - helios456
1
这不是一个像被接受的答案那样一般的解决方案。并非所有控件都将高度属性实现为'GridLength'对象(结构体)。对于那些只使用double的控件,此答案无效。而且问题并不是一般性的,它只是以网格作为示例。 - StayOnTarget

4

虽然问题已经通过代码回答了(按要求),但这里是对于基本控件属性而言的XAML解决方案,它们没有“auto”

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Height="{x:Static sys:Double.NaN}"

因为谷歌搜索 XAML 解决方案时将我带到了这里,所以发帖寻求关于 TextBox(自动模式不存在)的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接