С каким свойством зависимостей WPF я должен связываться для нахождения центра FrameworkElement? - PullRequest
1 голос
/ 06 апреля 2009

Я пишу приложение для WPF и пытаюсь найти наилучший подход к связыванию, но придумываю только «взломанные» решения, и я надеюсь, что есть лучший способ.

У меня есть объект Border (который происходит от FrameworkElement) внутри Grid. Размер границы может измениться из-за изменения текста дочернего TextBlock. Положение границы может измениться, потому что другие элементы в сетке могут переставить ячейку, в которой живет граница.

Я хочу нарисовать линию от нижнего левого угла экрана до точного центра объекта границы. Конечная точка линии, которая находится в точном центре границы, должна всегда оставаться в центре независимо от того, какой размер границы или положение на экране.

Как мне это сделать?

Моя идея заключается в том, что привязка к свойству зависимости кажется идеальным способом справиться с этим. Я мог бы использовать IValueConverter для объекта Binding, чтобы вычислить точный центр, учитывая его ActualWidth, ActualHeight и TranslatePoint (), чтобы найти верхний левый угол. Однако я не могу понять, какое свойство зависимости, с которым я должен связать, предупредит меня, когда Граница изменит размер и / или положение.

1 Ответ

0 голосов
/ 06 апреля 2009

Я думаю, что вы хотите сделать мультисвязывание со всеми ActualXxx свойствами как самого Border, так и Grid, содержащегося в:

<MultiBinding Converter="{StaticResource MyConverter}">#
    <Binding Path="ActualWidth" ElementName="_border"/>
    <Binding Path="ActualHeight" ElementName="_border"/>
    <Binding Path="ActualWidth" ElementName="_grid"/>
    <Binding Path="ActualHeight" ElementName="_grid"/>
</MultiBinding>

Другой вариант - сделать это в коде и переопределить метод OnRender(). Этот метод может вызвать реализацию базового класса и затем нарисовать линию. Затем вам нужно будет сделать элемент управления недействительным при изменении одного из указанных выше свойств.

...