在ObjectAnimationUsingKeyFrames中使用TemplateBinding

时间:2010-12-14 14:39:36

标签: silverlight coding-style templatebinding

当鼠标悬停在控件上时,我尝试设置控件的背景颜色。我尝试通过可视状态管理器来完成它。我能够运行以下代码:

<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>

并将使用此样式的控件的Tag-Property设置为“#FF123456”。

但这不起作用。它没有给我留下错误信息,它只是不改变backgroundcolor。有谁知道,问题可能是什么?

提前致谢,
弗兰克

2 个答案:

答案 0 :(得分:2)

不幸的是,你尝试这样做的方式在Silverlight中不起作用。 VisualStateManager动画不是显示树的一部分,因此您无法使用绑定。你有选择,StaticResources(也就是在资源字典中设置颜色)和基于代码的动画是不同的解决方法(具体取决于你想要做什么)。对于后者,请查看我问过类似问题的帖子:How can I animate a property dynamically in a Silverlight 4 UserControl?

答案 1 :(得分:0)

您无法在单个目标上动态执行此操作,但您可以执行的操作是创建另一个目标(例如,名为BorderBackgroundAlt),其背景可以在其声明中明确设置为{TemplateBinding Tag}。

然后你可以默认折叠BorderBackgroundAlt,并且在你的动画帧中而不是切换颜色,切换可见性,这样就可以折叠BorderBackground并且可以看到BorderBackgroundAlt。

相关问题