Анимация свойств содержимого шаблона в Silverlight - PullRequest
0 голосов
/ 08 марта 2010

Допустим, у меня есть такой элемент управления:

<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»? То есть, например, если я хочу получить доступ к свойству цвета первой градиентной остановки «Заливка» многоугольника внутри предъявителя контента, как бы я поступил так? Или я пытаюсь сделать это совершенно неправильно?

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

1 Ответ

0 голосов
/ 09 марта 2010

Попробуйте это для 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; просто измените индекс, чтобы ссылаться на другой.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...