Silverlight: Динамическое изменени цвета шрифта вместе с фоном в перекрестных состояниях – только два подхода
Ребята, не читайте, пожалуйтста, дальше, если вы не втеме.
Будет надо, Гугл вас сам сюда приведет.
Поехали:
То что в CSS и HTML стоит 2 копейки может превратиться в Silverlight в головную боль.
Задача: при наведении мыши изменить бэграунд и цвет шрифта.
Обычное состояние: Светлый фон и темный шрифт
Состояние при наведенной мыши или выделенного элемента: меняем на темный фон и светлый шрифт.
Теперь загвоздка – при уходе мыши, если элемент выбран, нужно сохранить состояние выделенности (Темный фон, свелый шрифт).
Конечно в HTML через CSS мы это сделаем без анимации, но просто и быстро. Мы меняем или добавляем втророй класс CSS, например, и все фиксируется и при уводе мыши состояние выделенности не меняется. Ну еще много вариантов, но не в этом соль.
Сильверлайт это всетаки не WPF, поэтму возникают сложности, т.к. в Silverllight это работает на визуальрных состояниях и переходах (транзишеннах - вроде называется).
Поскольку состояния наведения и увода мыши, а также выделения элемента находиться в разных визуальных группах, то эти состояния могут появлятся одновременно и перекрываться, что приводит к тому, что у выделенного элемнта, при уводе мыши проподает его View выделенности, т.е. возвращается светлый фон и темный шрифт, как в обычном состоянии.
Стыдно признать, что нет для такого простого и частого дизайнерского приема стандартного решения в Silverlight.
Вернее оно есть и называется “перепрограммировать чужой непродуманный элемент”. Фу.
Если вам попалась эта задачка, то вот какие решения мы нарыли с заграничными индусскими и не только товарищами:
- В лоб – в шаблоне контрола разместить два текстовых элемента, один над другим. Один управлять из визуальных состояний мыши, другим из стостояний Selected.
Это работае :) Производительность не страдает. Это вам не DataGrid с 1000 стороками рисоват, поэтому все хорошо, конечно если вы не стилизируете таки DataGrid с 1000 строками кода. - Программерское решение – управление состояниями выделенности мы оставляем неизменными, на совести XAML разметки.
А управление сстояниями наведением мыши переносим в код. Я для этого применяю своей кастомизированный ContentControl. В нем я анализирую IsSelected и реагирую на наведение и уход мыши.
Комментарии
Отправить комментарий