如何绑定RowDefinition的高度?

mos*_*ald 3 wpf grid height xaml binding

在此示例代码中,我试图抵消GridCanvas通过其行的高度位置.有谁看到我可能做错了什么?正如您所看到的,我尝试在xaml文件中移动绑定较低的位置,以防RowDefinitions首先需要定义.无论哪种方式,它似乎并不重要因为Canvas.Top总是0.

<Canvas>
   <Grid Canvas.Top="{Binding ElementName=DetailsRow, Path=ActualHeight}">
      <Grid.RowDefinitions>
         <RowDefinition x:Name="NameRow" />
         <RowDefinition x:Name="DetailsRow" />
      </Grid.RowDefinitions>
      <Button Grid.Row="0">Button</Button>
      <Button Grid.Row="1">Button</Button>

      <!-- I expected this to maybe work, but no dice
      <Canvas.Top>
         <Binding ElementName="DetailsRow" Path="ActualHeight" />
      </Canvas.Top>
      -->

   </Grid>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

Jos*_*osh 9

ActualHeight不是依赖属性,因此它可能不会触发任何类型的更改通知.ActualHeight实际上从0开始直到测量网格,这可能是一个解释.与FrameworkElement定义ActualHeight为依赖属性的方法不同,RowDefinition它不是派生自FrameworkElement仅定义ActualHeight为没有更改事件的普通属性.

我实际上已经考虑过应该有一个BindingMode.Polling选项,绑定系统会以一定的间隔轮询源属性.但不幸的是,你可能只是被困在代码中.

  • 我最后在该行中放置一个面板,命名它,然后绑定它的高度.我在启动时遇到绑定跟踪错误,但是在窗口完全创建之后,一切似乎都运行正常.如果我能弄清楚如何删除这些错误,我会在这里发布我的解决方案. (2认同)