Как подключить пользовательские свойства управления, которые анимируются внутри шаблона управления?Использование настраиваемого свойства управления в анимации
Я создаю пользовательскую кнопку с несколькими состояниями, и я хочу анимировать цвет текста кнопки при изменении состояния. Обычно текст серый, и на MouseOver он становится черным.
Я создал NormalTextBrush для черного текста, и FadedTextBrush для серого текста:
<SolidColorBrush x:Key="NormalTextBrush" Color="Black" />
<SolidColorBrush x:Key="FadedTextBrush" Color="DarkSlateGray" />
До сих пор, так хорошо. Моя анимация работает без ошибок. Когда мышь переходит через кнопку, текст переходит от серого к черному. Но то, что я действительно хочу сделать, это позволить разработчику, использующему элемент управления, указать цвет текста.
Итак, я переопределяю обе текстовые кисти как привязки к свойству переднего плана элемента управления. FadeTextBrush использует конвертер значений для изменения цвета переднего плана. Пересмотренные ресурсы выглядят следующим образом:
<SolidColorBrush x:Key="NormalTextBrush" Color="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}}" />
<SolidColorBrush x:Key="FadedTextBrush" Color="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ColorConverter}, ConverterParameter='1.2'}" />
И вот где я столкнулся с проблемой. WPF не разрешает привязки к анимации внутри шаблонов управления. Он выдает исключение с сообщением «Невозможно заморозить это дерево временной таблицы раскадровки для использования по потокам». Проблема документирована here.
И это подводит меня к моему вопросу: Как настроить ресурсы кисти, чтобы они были подключены к свойству Foreground, но чтобы я мог использовать их с анимациями в моем шаблоне управления?
Любой, кто может ответить на этот вопрос, я куплю вам пиво в следующий раз, когда увижу вас! Спасибо за вашу помощь.
Я принял этот ответ, потому что он отвечает на вопрос, как я его представлял. Но я думаю, что есть более простое решение - я собираюсь сбрасывать анимацию изменения состояния и выполнять унифицированные изменения состояния с помощью триггеров стиля. –