在这个示例代码中,我试图偏移 Grid 的 Canvas 按其中一行的高度定位。有人看到我可能做错什么了吗?如您所见,我尝试将XAML文件中的绑定移到较低的位置,以防 RowDefinitions 需要先定义。不管怎样,这似乎并不重要,因为 Canvas.Top 总是0。
Grid
Canvas
RowDefinitions
Canvas.Top
<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>
ActualHeight 不是依赖属性,因此它可能不会触发任何类型的更改通知。 实际高度 实际上从0开始直到网格被测量,所以这可能是一种解释。不像 FrameworkElement ,这确实定义了 实际高度 作为依赖属性, RowDefinition 不是从 框架元素 只是定义 实际高度 作为没有更改事件的普通属性。
ActualHeight
实际高度
FrameworkElement
RowDefinition
框架元素
我实际上已经考虑过这样一个事实,即应该有一个bindingMode.polling选项,在该选项中绑定系统将每隔一定的时间轮询源属性。但不幸的是,您可能会被代码所束缚。