WPF Controls: How to Reference Resources in Animations? -
i have written control , created storyboard cause animation during triggered events. changes fill of ellipse duration of time. instead of writing new radialgradientbrush
each time need change fill, provided 2 of them in resources.
edit: have ellipse
main component control , affected animation. it's implementation simple , looks this:
<ellipse name="myellipse" style="{staticresource dimstyle}" />
when add storyboard (instead of referencing brush resource), animation works intended. when reference brush resource exception:
"cannot find resource named 'illuminatedstyle'. resource names case sensitive."
inside of storyboard, referenced:
<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>
the styles closely identical , gradientstop
color properties differ i'll provide 1 style example.
the style referenced
<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>
so how correctly reference style such in storyboard
?
note: storyboard
, style
both contained within same usercontrol.resources
tag broken out example.
edit
put style
before storyboard
in usercontrol.resources
, exception stating:
"this freezable cannot frozen. @ system.windows.freezable.freeze() @ system.windows.freezable.getcurrentvalueasfrozen() @ system.windows.media.animation.timelinecollection.getcurrentvalueasfrozencore(freezable source) @ system.windows.freezable.clonecorecommon(freezable sourcefreezable, boolean usecurrentvalue, boolean clonefrozenvalues) @ system.windows.media.animation.timeline.getcurrentvalueasfrozencore(freezable sourcefreezable) @ system.windows.freezable.getcurrentvalueasfrozen() @ system.windows.media.animation.clock..ctor(timeline timeline) @ system.windows.media.animation.timelinegroup.allocateclock() @ system.windows.media.animation.clock.allocateclock(timeline timeline, boolean hascontrollableroot)"
there 3 reasons why freezable
cannot frozen:
- it has animated or data bound properties.
- it has properties set dynamic resource.
- it contains freezable sub-objects cannot frozen.
so, first find out freezable
causing trouble , check above.
Comments
Post a Comment