Я написал элемент управления и успешно создал раскадровку, чтобы вызывать анимацию во время запускаемых событий.Это изменяет заполнение эллипса в течение некоторого времени.Вместо того, чтобы писать новый RadialGradientBrush
каждый раз, когда мне нужно изменить заливку, я предоставил два из них в ресурсах.
РЕДАКТИРОВАТЬ : у меня есть Ellipse
, который является основнымКомпонент управления и является то, что влияет на анимацию.Его реализация проста и выглядит следующим образом:
<Ellipse Name="myEllipse" Style="{StaticResource DimStyle}" />
Когда я добавляю его в раскадровку (вместо ссылки на кисть в качестве ресурса), моя анимация работает так, как задумано.Когда я ссылаюсь на кисть как на ресурс, я получаю следующее исключение:
"Cannot find resource named 'IlluminatedStyle'. Resource names are case sensitive."
Внутри раскадровки это место, на которое в данный момент ссылаются:
<UserControl.Resources>
<Storyboard x:Key="Foo">
<ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.01" Value="{StaticResource IlluminatedStyle}" />
<DiscreteObjectKeyFrame KeyTime="0:0:0.85" Value="{StaticResource DimStyle}" />
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
Стили полностью идентичны, и отличаются только свойства цвета GradientStop
, поэтому для примера я приведу только один стиль.
Ссылка на стиль
<UserControl.Resources>
<Style x:Key="IlluminatedStyle" TargetType="Ellipse">
<Setter Property="Fill">
<Setter.Value>
<RadialGradientBrush>
<GradientStop Color="#FF215416" Offset="1"/>
<GradientStop Color="#FE38DA2E" Offset="0"/>
<GradientStop Color="#FE81FF79" Offset="0.688"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
Так как мне правильно сослаться на такой стиль в моем Storyboard
?
Примечание : Storyboard
и Style
оба содержатся в одном и том же теге UserControl.Resources
, но для этого примера разбиты.
EDIT
Я поставил Style
перед Storyboard
в UserControl.Resources
, и теперь я получаю исключение:
"This Freezable cannot be frozen.
at System.Windows.Freezable.Freeze()
at System.Windows.Freezable.GetCurrentValueAsFrozen()
at System.Windows.Media.Animation.TimelineCollection.GetCurrentValueAsFrozenCore(Freezable source)
at System.Windows.Freezable.CloneCoreCommon(Freezable sourceFreezable, Boolean useCurrentValue, Boolean cloneFrozenValues)
at System.Windows.Media.Animation.Timeline.GetCurrentValueAsFrozenCore(Freezable sourceFreezable)
at System.Windows.Freezable.GetCurrentValueAsFrozen()
at System.Windows.Media.Animation.Clock..ctor(Timeline timeline)
at System.Windows.Media.Animation.TimelineGroup.AllocateClock()
at System.Windows.Media.Animation.Clock.AllocateClock(Timeline timeline, Boolean hasControllableRoot)"