#c_sharp #wpf
Доброго времени суток, Хешкодовцы В продолжение предыдущего моего вопроса по поводу анимации с использованием триггеров. Хочется сделать анимацию цветом при наведении курсора мышки на кнопку. Для этого разработал стиль, который должен применяться при наведении мышки на кнопку. Но тут появилось 2 проблемы: Как применить стиль к кнопки при срабатывании триггера? Что-то никак не получается. Если не использовать стиль, то происходит нечто странное: триггер срабатывает и фон кнопки красится в желтый цвет (ну так и задумано), но после этого практически сразу (менее чем через секунду) он заливается ярко-серым градиентом, как будто где-то перекрывается моя анимация еще какой-то. Как это можно отследить, кто перекрывает мои стили?.. Заранее спасибо за Вашу помощь. Update Ну вот и опять появилось время для самообучения. Попытался вспомнить, на чем остановился, еще нашел неплохую статью в MSDN, делаю аналогично, но другие стили, и на тригерах опять столкнулся с проблемой. То ли читаю криво, то ли в windows 7 как-то особенно получается. В общем суть проблемы как было написано раньше осталась. Код XAML:А вот результат. Изначально окно с растянутой кнопкой: После наведения курсора мышки: Убрали курсор мышки: Итого видим, что изначальный цвет соответствует задуманному, окончательный цвет должен был появиться при наведении курсора, однако в момент наведения курсора видим какие-то стили от семёрки. Ну и окончательный вариант соответствует ожиданию, так как не обрабатываем уход курсора. В общем, где я проглядел что-то?
Ответы
Ответ 1
Смотрите, в чём дело. Стиль для Button определяется примерно так, как в этом примере: http://msdn.microsoft.com/en-us/library/ms753328.aspx. Вы видите, что анимация на MouseOver реализована в переопределённом ControlTemplate через VisualStateManager (почитайте про него, полезная штука). Что происходит на самом деле: срабатывает ваш триггер и переключает Background срабатывает VisualStateManager, переходит в состояние CommonStates.MouseOver, и применяет поверх ваших изменений свои вычисленные значения (которые определены в Template, унаследованном от системного стиля.) То есть так сделать не получится, т. к. два фрагмента кода «сражаются» за цвет фона. Мораль отсюда такова: если уж меняете стиль контрола, перекрывайте его полностью. Или пользуйтесь выставленными наружу свойствами, это предусмотренные дизайном точки кастомизации.
Комментариев нет:
Отправить комментарий