Использование TemplateBinding в ObjectAnimationUsingKeyFrames - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь установить цвет фона элемента управления, когда мышь находится над ним. Я пытаюсь сделать это через визуальный менеджер состояний. Мне удалось запустить следующий код:

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <SolidColorBrush Color="#FF123456" />
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

Но я не хочу устанавливать цвет в шаблоне, а привязываю его к значению элемента управления. Я пробовал это свойство 'Tag' следующим образом:

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <SolidColorBrush Color="{TemplateBinding Tag}" />
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

и установка свойства тега элемента управления, использующего этот стиль, на «# FF123456».

Но это не работает. Это не оставляет мне сообщение об ошибке, оно просто не меняет цвет фона. Кто-нибудь знает, в чем может быть проблема?

Заранее спасибо,
Frank

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

К сожалению, способ, которым вы пытаетесь это сделать, не будет работать в Silverlight. Анимации VisualStateManager не являются частью дерева отображения, поэтому вы не можете использовать привязку. Однако у вас есть варианты: StaticResources (он же настраивает цвета в словаре ресурсов) и анимации на основе кода - это разные обходные пути (в зависимости от того, что именно вы хотите сделать). Для последнего ознакомьтесь с темой, где я задал похожий вопрос: Как динамически анимировать свойство в Silverlight 4 UserControl?

0 голосов
/ 11 декабря 2013

Вы не можете сделать это динамически на одной цели, но вы можете создать другую цель (например, с именем BorderBackgroundAlt), фон которой вы можете явно установить в {TemplateBinding Tag} в своем объявлении.

Тогда вы можете свернуть BorderBackgroundAlt по умолчанию, а в кадре анимации вместо переключения цветов переключать видимости, чтобы BorderBackground свернулся и BorderBackgroundAlt стал видимым.

...