2010-03-08 2 views
0

Допустим, у меня есть контроль, как это:Анимирования свойства содержимого шаблона в Silverlight

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

MyButton является стилем для фона кнопки в то время как MyButtonIcon является стилем значок самого полигона. Я хотел бы тонко анимировать кнопку, когда пользователь наводит курсор мыши на кнопку. Я могу обойти фон (определенный в MyButton) обычным способом в шаблоне (VisualStateManager/VisualState/MouseOver/StoryBoard/ColorAnimation). Чтобы получить представление, моя декларация 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»? То есть, скажем, например, если я хочу получить доступ к свойству цвета первой градиентной остановки «Заполнения» многоугольника внутри презентатора контента, как бы я это сделал? Или я пытаюсь сделать это совершенно неправильно?

Надеюсь, я был чист и предоставил достаточно подробностей, дайте мне знать, если вам нужно знать больше.

ответ

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; просто измените индекс на другой.

Надеюсь, это поможет!

Смежные вопросы