如何绑定到 RowDefinition 的高度?

Posted

技术标签:

【中文标题】如何绑定到 RowDefinition 的高度?【英文标题】:How do I bind to a RowDefinition's height? 【发布时间】:2011-01-25 18:49:32 【问题描述】:

在此示例代码中,我试图将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>

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我没有注意到它不是依赖属性。嗯。好的,我会继续寻找,但我认为您需要在代码中执行此操作可能是正确的。 我最终在该行中放置了一个面板,命名它,然后绑定它的高度。我在启动时遇到绑定跟踪错误,但在窗口完全创建后,一切似乎都正常。如果我能弄清楚如何消除这些错误,我会在这里发布我的解决方案。 我真的不知道,现在已经快 7 年了。 ? 我很确定我包装了DetailsRow 行的内容(或者它可能在内容后面,隐藏),然后绑定到它的高度。

以上是关于如何绑定到 RowDefinition 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何折叠 RowDefinition?

如何为 Grid RowDefinition 高度变化设置动画(当 Height="Auto" 时)

代码中的 WPF 自动高度

如何将面板的高度绑定到 Ext Js 中的视口高度?

如何使用情节提要更改wpf中网格行的高度

WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪