2010-03-10 89 views
3

在这个示例代码中,我试图通过其中一行的高度来抵消GridCanvas位置。有没有人看到我可能做错了什么?正如你所看到的,我试图在xaml文件中移动较低的绑定,以防需要首先定义RowDefinitions。无论哪种方式,它似乎并不重要,因为Canvas.Top始终为0如何绑定到RowDefinition的高度?

<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> 

回答

8

ActualHeight不是依赖属性,因此它可能不是触发任何形式的变更通知。 ActualHeight实际上从0开始,直到电网被测量为止,这可能是一种解释。与确定ActualHeight作为依赖项属性的FrameworkElement不同,RowDefinition不是从FrameworkElement派生而是仅将ActualHeight定义为没有更改事件的普通属性。

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

+0

我没有注意到它不是一个依赖属性。嗯。好的,我会继续寻找,但我认为你可能需要在代码中完成。 – moswald 2010-03-10 15:41:18

+0

@mos,还好吗? – Josh 2010-03-18 06:08:24

+2

我最后把面板放在那一行内,命名它,然后绑定它的高度。我在启动时遇到绑定跟踪错误,但在窗口完全创建后,一切似乎都可以正常工作。如果我能弄清楚如何删除这些错误,我会在这里发布我的解决方案。 – moswald 2010-03-19 15:32:44

相关问题