【问题标题】:WPF Auto height in code代码中的 WPF 自动高度
【发布时间】:2011-01-28 09:09:22
【问题描述】:

如何在 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>

我想在后面的代码中重现这种行为。有什么想法吗?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    也许this link 会帮助你。

    有时,您可能想要 以编程方式设置高度或 自动输入的 WPF 元素的宽度 代码。为此,只需使用 Double.NaN(非数字)值。

    例如,在 C# 中:

    this.txtName.Width = Double.NaN;

    【讨论】:

    • 不要在我的情况下工作。但我正在通过行为改变高度宽度(表达式混合 4.0 lib)
    • 链接已失效,但您可以访问存档版本here
    • Nimrod 的回答更加明确和容易理解。
    • 获取“NaN”不是属性“MaxWidth”的有效值
    • 我觉得 Nimrod 的答案是最干净的,现在应该是公认的答案(过去不确定 GridLength.Auto 是可能的)。还有GridLength.Star来填充剩余区域。
    【解决方案2】:

    你可以使用

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

    【讨论】:

    • 这个答案和接受的答案有什么不同吗?因为如果不是,这应该是不绕过框架的最佳答案。
    • 根据反射器,GridLength.Auto是new GridLength(1.0, GridUnitType.Auto);因此不完全等同于接受的答案,但更具可读性。
    • 这不像公认的答案那样普遍。并非所有控件都将 Height 属性实现为“GridLength”对象(结构)。对于那些只使用 double 这个答案的人来说是行不通的。而且这个问题也不是泛泛而谈,只是以网格为例。
    【解决方案3】:

    虽然已通过代码隐藏(如所询问)回答了该问题,但对于没有 "auto" 的基本控件属性,这是 XAML 中的相同解决方案:

    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    
    Height="{x:Static sys:Double.NaN}"
    

    发布是因为谷歌在搜索 TextBox 的 XAML 解决方案时将我带到了这里(自动不存在)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多