将Line位置绑定到usercontrol中元素的位置

时间:2010-10-30 23:17:10

标签: wpf user-controls element line bind

我有一个包含特定用户控件的画布。

在某些时候,我想在画布上添加一行(在代码中),其中一个点绑定到usercontrol中元素的位置。 usercontrol是动态的,因此元素可以改变位置。

usercontrol包含一个带有网格,堆栈面板等布局,该元素可以位于其中。

对于usercontrol,我将获得Canvas.Left和Canvas.Top属性, 但是因为我不想绑定到usercontrol而是绑定到它包含的元素, 我该怎么办? (如果用户控件的布局发生变化,则会考虑元素的新位置)

1 个答案:

答案 0 :(得分:1)

让我们规定这里有三件事:

“Line”受到约束 包含的“孩子” “父”。

Line应使用需要访问Parent的ValueConverter将其Canvas.Top和Canvas.Left设置为Child上的绑定。

ValueConverter将返回 Parent.Left + Child.GetPosition(Parent).Left

(或者无论确切的查找方法是什么)。重要的是,Child获得相对于Parent的位置,并添加Parent的位置。

(阐述发表评论) 所以你这样指定一行:

<Line X1="50" Y1="50" X2="200" Y2="200" />

这意味着您将绑定应用于每个坐标说明符。可能你最好的办法是将X或Y作为ConverterParameter传递给ValueConverter,以节省你写的太多重复代码。

您的原始问题指明您正在寻找X1,Y1。我不知道你想要的另一端是什么,它听起来像是固定在某个地方。或者,如果它转向另一个元素,那么基本上就是同样的技巧 - 这只能用于一点。让我们假设你总是希望另一个点是100,100。

所以你的行是这样指定的:

<Line X1="{Binding ElementName=yourTarget, ConverterParameter=X, Converter={StaticResource targetLocationExtractor}}" Y1="{Binding ElementName=yourTarget, ConverterParameter=Y, Converter={StaticResource targetLocationExtractor}}" X2="200" Y2="200" />