привязка данных свойства к любому из двух свойств зависимости - PullRequest
1 голос
/ 21 сентября 2008

У меня есть два пользовательских элемента управления, которые аналогичны узлу, и элемент управления, который рисует связи между узлами.

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

Было бы здорово иметь возможность изменить другое значение линии, например ширину обводки, в зависимости от расстояния между двумя узлами. Поэтому свойство должно обновляться при перемещении любого из узлов, и я не могу понять, как это будет работать.

У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 23 сентября 2008

вы можете попробовать сделать что-то подобное:

  1. Как и в предыдущем посте, определите свойство ширины, обводки (что вам нужно) в классе ссылок
  2. определяет мультисвязь, применяемую к этому свойству, передавая два ваших узла в привязку это должно выглядеть так:




  1. Реализовать интерфейс IMultiValueConverter, который будет в основном вычислять, как должен выглядеть штрих, основываясь на расстоянии между узлами.

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

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

В общем, всякий раз, когда вам нужно сопоставить несколько значений свойств с одним другим свойством, вам придется использовать multibinding и конвертер.

0 голосов
/ 21 сентября 2008

Вы можете определить свойство StrokeWidth в вашем классе ссылок, которое будет вычисляться каждый раз, когда узлы перемещаются, а затем привязывать к нему соответствующее свойство стиля.

Полагаю, вы могли бы также попытаться что-то сделать с DataTriggers, но для работы им нужны определенные значения - вы не можете использовать какие-либо выражения. Это затруднило бы правильное масштабирование решения до широкого диапазона расстояний между узлами.

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