Принудительное перекрашивание элемента управления WPF - PullRequest
0 голосов
/ 24 августа 2009

В настоящее время я пытаюсь создать классы для WPF-приложения, подобного рисованию. Мне нужно базовые классы LineMovement (линия от StartPoint до EndPoint) и PathMovement (линия, проходящая через все точки, указанные в свойстве Points типа PointCollection). Эти классы наследуются от Control и получают свой внешний вид через ControlTemplate.

ControlTemplate также добавляет Adorner к AdornerLayer объектов Movement, содержащих небольшой визуальный маркер для каждой подвижной точки конкретной линии. Эти маркеры поддерживают перетаскивание мышью.

Проблема в том, что мои классы Движения каким-то образом не перекрашиваются при перемещении их точек. Я отладил свой код с помощью Mole и обнаружил, что Polyline, используемый для визуализации линии, получает измененные значения точек (видимые в свойстве Points), но просто не перерисовывается.

Как заставить перерисовать элемент управления WPF?

Ответы [ 3 ]

1 голос
/ 27 августа 2009

Оказывается, что TemplateBinding - чистое зло.

Когда я связываю точки полилинии с помощью {TemplateBinding Points}, она не обновляется сама, тогда как когда я связываю ее с {Binding RelativeSource = {RelativeSource TemplatedParent}}, она отлично работает.

Примечание для себя: никогда больше не используйте эту чертову привязку к шаблону.

1 голос
/ 09 февраля 2010

TemplateBinding не поддерживает двустороннюю привязку данных (т.е. обновление коллекции Points новыми значениями полилинии). Он предназначен только для одностороннего связывания данных для использования в шаблонах управления. См. Запись в блоге Bea Stollnitz: http://bea.stollnitz.com/blog/?p=38

0 голосов
/ 25 августа 2009

Вам нужно, чтобы DP ваших объектов Move имели свойство метаданных AffectsArrange (http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx)) - таким образом, когда свойство изменяется, WPF знает, что оно должно перерисоваться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...