2014-11-30 6 views
0

Мне нужны определенные элементы для изменения внешнего вида (изменение цвета, добавления текста и т. Д.), Когда пользователь держит клавишу SHIFT, чтобы показать, что это повлияет на этот элемент.Модификаторная клавиша нажата как триггер

Не все элементы будут иметь один и тот же DataContext, поэтому я считаю, что не могу просто привязать его к одному DependencyProperty в MainWindow.

Каждый из них будет иметь что-то вроде

<DataTrigger Binding="{[ShiftPressed]"} Value="True"> 
    <Setter [change color/add text/...]/> 
</DataTrigger> 

Как бы вы это сделать? Это повлияет на производительность, если многие ListBoxItems прослушали ее?

ответ

0

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

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

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

UPDATE: только что поняли, что у вас уже есть логическое свойство, определенное в вашем вопросе. Извини за это!

Смежные вопросы