cji*_*ibo 10 wpf animation mvvm
我正在寻找一种干净的方式来启动一个具有动态值的动画.基本上我想做一个动画,其中一个元素根据另一个元素的数据改变宽度.假设我有一个文本属性为绑定的TextBlock.当这个属性改变时,我想要一个视觉元素说一个Rectangle,为了我们的目的,做一个DoubleAnimation,将宽度从前一个值改为新值.
如果可能的话,我试图远离将代码放在我的视图中.我已经研究过DataTriggers,但它们似乎要求你知道它的价值,例如Enum.在我的情况下,只是需要触发故事板的值更改,动画需要从当前(上一个)值开始,并很好地移动到新值.
有任何想法吗.也许我只是错过了一处房产.
cji*_*ibo 17
这是我最终得到的解决方案.要根据我的ViewModel中的数据执行动画,我使用了DataTrigger.下面是我的控件风格.
<Style TargetType="Grid" x:Key="DetailRotation" >
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AnimationState}" Value="New">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="EndAnimation" />
<BeginStoryboard Name="NewAnimation">
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,30,0,0" To="0,0,0,0" Duration="0:0:1" />
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=AnimationState}" Value="End">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="NewAnimation" />
<BeginStoryboard Name="EndAnimation">
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,0,0,0" To="0,-20,0,0" Duration="0:0:1"/>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)