привязка данных к любому из двух свойств зависимостей

StackOverflow https://stackoverflow.com/questions/109275

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

<Multibinding Converter="{Конвертер StaticResource}">
<Binding Path="Node1" RelativeSource|Source.../>
<Путь привязки="Node2" .../>
</Мультипривязка>

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top