在2个画布之间绑定UserControls Canvas.GetTop

时间:2014-07-21 13:24:56

标签: wpf vb.net wpf-controls

我有2个画布,canvasA和canvasB,驻留在同一个LayoutControl中。

在我的代码中,我使用来自数据库的数据使用TextEdit UserControls填充canvasA。这些是父标签。

子标签也是从数据库中填充但在canvasB中填充的。这些子项与它的父项位于相同的Canvas.Top位置,但Canvas.Left位置是计算和设置的。

我想知道是否有一种方法可以将canvasA中父标签的顶部位置与canvasB中相应的子标签绑定。我试过了:

Dim topBinding As New Binding
topBinding.Source = parentLabel
topBinding.Path = New PropertyPath("topPosition")
topBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
topBinding.IsAsync = True

Me.SetBinding(Canvas.TopProperty, topBinding)

这些代码在childLabel.Loaded中,并且传递了parentLabel .topPosition只是一个存储父Label的当前“Top”位置的属性

我也试过

Dim topBinding As New Binding
topBinding.Source = parentLabel
topBinding.Path = New PropertyPath("Canvas.TopProperty")
topBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
topBinding.IsAsync = True

Me.SetBinding(Canvas.TopProperty, topBinding)

以及

Me.SetBinding(Canvas.TopProperty, Canvas.GetTop(parentTextEdit))

但没有任何作用。孩子们在“顶级”位置都是0。

我已经使用了Canvas.SetTop(childLabel,parentLabel.topPosition)。

有没有办法让绑定工作呢?因此,稍后当我需要移动父标签(仅限Y轴)时,我不必计算并移动每个childLabel。

感谢。

1 个答案:

答案 0 :(得分:1)

它应该像这样工作(Canvas.TopProperty不是字符串):

Dim topBinding As New Binding
topBinding.Source = parentLabel
topBinding.Path = New PropertyPath(Canvas.TopProperty)
Me.SetBinding(Canvas.TopProperty, topBinding)

或者这个(因为Canvas.Top是一个附加属性):

Dim topBinding As New Binding
topBinding.Source = parentLabel
topBinding.Path = New PropertyPath("(Canvas.Top)")
Me.SetBinding(Canvas.TopProperty, topBinding)