Давайте определим, что здесь есть 3 вещи:
«Линия» привязана к «Ребенку», который содержится в «Родителе».
Линия должна установить свой Canvas.Top иCanvas.Left для Binding on Child, используя ValueConverter, которому необходим доступ к Parent.
ValueConverter вернет Parent.Left + Child.GetPosition (Parent) .Left
(иликакими бы точными ни были методы поиска).Важно то, что Ребенок получает свою позицию относительно Родителя и добавляет в позицию Родителя.
(Разработка комментария к публикации) Таким образом, вы указываете строку следующим образом:
<Line X1="50" Y1="50" X2="200" Y2="200" />
Это означает, что вы применяете привязку к каждому из этих указателей координат.Вероятно, вам лучше всего передать X или Y в ValueConverter в качестве ConverterParameter, чтобы сэкономить на написании слишком много дублирующего кода.
Ваш первоначальный вопрос указывает, что вы ищете 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" />