gpt4 book ai didi

WPF MVVM属性更改动画

转载 作者:行者123 更新时间:2023-12-04 03:06:03 25 4
gpt4 key购买 nike

我正在寻找一种干净的方法来启动具有动态值的动画。基本上,我想制作一个动画,其中一个元素根据另一个元素的数据更改宽度。假设我有一个TextBlock,其Text属性为Binding。当此属性更改时,我希望一个可视元素说一个Rectangle以便我们做一个DoubleAnimation,将宽度从以前的值更改为新值。

如果可能的话,我试图避免在我的 View 中放置代码。我研究了DataTriggers,但它们似乎要求您知道该值是什么,例如Enum。在我的情况下,仅是值更改才需要触发 Storyboard ,动画将需要从当前(上一个)值开始并很好地移动到新值。

有任何想法吗。也许我只是错过了一个属性(property)。

最佳答案

这是我最终得到的解决方案。为了基于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>

关于WPF MVVM属性更改动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com