将行位置绑定到usercontrol中元素的位置
问题描述:
我有一个包含特定用户控件的画布。将行位置绑定到usercontrol中元素的位置
在某些时候,我想在画布上添加一行(代码中),其中一个点绑定到usercontrol中元素的位置。用户控件是动态的,所以元素可以改变位置。
用户控件包含该元素可以位于格栅,stackpanels等的布局。
对于用户控件,我能得到Canvas.Left和Canvas.Top属性, 但因为我不不想绑定到usercontrol,而是绑定到它包含的元素, 我该怎么做? (在某种程度上,如果用户控件的布局变化,元素的新位置考虑)
答
让我们规定,这里有三样东西:
“线”被绑定到 “儿童“谁被 ”父母“包含。
行应使用需要访问Parent的ValueConverter来将其Canvas.Top和Canvas.Left设置为Child上的Binding。
的ValueConverter将返回 Parent.Left + Child.GetPosition(母公司)。左
(或任何确切的查询方法)。重要的是,孩子获得相对于父母的位置,并添加父母的位置。
(阐述后评论) 所以你指定路线是这样的:
<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" />
感谢您的答复。 WPF线有X1,Y1-X2,Y2点应该绑定。 你能详细说说我该怎么做吗? – Pygmy 2010-10-31 00:44:23
干杯,我已经能够找出使用转换器! – Pygmy 2010-11-01 11:03:15