在Silverlight中动画模板内容的属性

时间:2010-03-08 17:40:33

标签: silverlight xaml animation

假设我有这样的控件:

<Button Style="{StaticResource MyButton}">
     <Polygon Style="{StaticResource MyButtonIcon}"
              Points="... some points ..." />
</Button>

MyButton 是按钮背景的样式,而 MyButtonIcon 是按钮图标多边形本身的样式。当用户将鼠标悬停在按钮上时,我想巧妙地为按钮添加动画效果。我可以设法在模板(VisualStateManager / VisualState / MouseOver / StoryBoard / ColorAnimation)中以常规方式为背景设置动画(在MyButton中定义)。为了获得一个想法,我的ColorAnimation声明看起来像这样:

<ColorAnimation Storyboard.TargetName="BackgroundTop"
                Storyboard.TargetProperty="Color"
                To="#FFFFFF"
                Duration="0:0:0.200" />

这适用于背景。但是,我还想为内容多边形的渐变色块的颜色设置动画。我不能把动画放在MyButtonIcon中,因为当鼠标悬停在按钮的任何地方时,我希望动画多边形,而不仅仅是按钮内的多边形。我想它看起来像这样:

<ColorAnimation Storyboard.TargetName="MyContentPresenter"
                Storyboard.TargetProperty="Some.Really.Long.Path.Color"
                To="#FFFFFF"
                Duration="0:0:0.200" />

问题是:“Some.Really.Long.Path.Color”的值应该是多少?也就是说,例如,如果我想访问内容呈现器内多边形的“填充”的第一个渐变停止的颜色属性,我该怎么做呢?或者我试图以完全错误的方式做到这一点?

我希望我很清楚,并提供足够的详细信息,如果您需要了解更多,请告诉我。

1 个答案:

答案 0 :(得分:0)

Storyboard.TargetProperty

ColorAnimation尝试此操作
Storyboard.TargetProperty =
"(MyContentPresenter.MyButtonIcon.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)"

我不确定(MyContentPresenter.MyButtonIcon.Fill)部分是否正确,但其余部分应该是正确的。如果这不起作用,请使用(MyContentPresenter.MyButtonIcon.Fill),直到它指向您的GradientBrush,其余部分应该落实到位。

我想这是不言而喻的,但我会说以下是:(GradientBrush.GradientStops)[0]指的是GradientStop中的第一个GradientBrush;只需更改索引即可引用另一个索引。

希望这有帮助!