当鼠标悬停在控件上时,我尝试设置控件的背景颜色。我尝试通过可视状态管理器来完成它。我能够运行以下代码:
<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。有谁知道,问题可能是什么?
提前致谢,
弗兰克
答案 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。