在Xaml中,如何使符号的高度取决于另一个动态计算的高度

时间:2015-01-21 18:57:53

标签: .net wpf xaml

我有一个DataTemplate,其中三列排列在一个网格中,我希望整个网格的高度取决于第一列内容的高度。这些是我尝试的解决方案,但我可能没有做到这一点......

  1. Grid.Height = {Binding ElementName = Column0,Path = Height}
  2. Column1.Height = Column2.Height = {Binding ElementName = Column0,Path = Height}
  3. 如果Column0的高度是硬代码,则只有(2)有效,但这不是必需的。奇怪的是(1)不起作用,因为测量/安排Xaml显示过程似乎应该允许它。

    结果是,列的高度似乎始终是Grid本身容器的高度。结果,似乎不可能做出像这样优雅的事情......

    <Grid>
      <Grid Grid.Column="0" x:Name="Column0">
        ...
      </Grid>
      <Grid 
        Grid.Column="1" 
        Height="{Binding ElementName=Column0,Path=Height}"
        >
        ...
      </Grid>
      <Grid 
        Grid.Column="1" 
        Height="{Binding ElementName=Column0,Path=Height}"
        >
        ...
      </Grid>
    </Grid>
    

    <Grid Height="{Binding ElementName=Column0,Path=Height}">
      <Grid Grid.Column="0" x:Name="Column0">...</Grid>
      <Grid Grid.Column="1">...</Grid>
      <Grid Grid.Column="2">...</Grid>
    </Grid>
    

1 个答案:

答案 0 :(得分:0)

使用,

Height="{Binding ElementName=Column0,Path=ActualHeight}"

“高度”属性仅仅是“建议的”高度,并且在测量和排列阶段后确定。似乎。

注意:第一种和第二种方法都可以使用,但行为略有不同,但可能是由于子列的特定控制。基本上,Column0的子网格将尊重它的容器的高度,因此它不会报告它的实际高度的变化,直到它无法帮助它(其中一行已经扩展太远而无法缩小其他行)容纳它)。这对“ActualHeight”来说不合理。