WPF平滑过渡数据绑定属性更新

时间:2015-07-27 22:20:40

标签: wpf xaml animation mvvm

我有一个控件,其边距绑定到我的视图模型的属性:

<Grid Margin="{Binding Path=Property1, Converter={StaticResource Converter1}}"></Grid>

如何在连续更新Margin属性之间获得平滑动画?我希望边距可以滑动很短的时间而不是离散的跳跃。优选xaml溶液。

编辑: 这与此网站上的其他问题不同,因为我需要将厚度动画中的“From”绑定到之前的值,并将“To”绑定到更新的值。为视图模型添加另一个属性似乎是一种破解。

2 个答案:

答案 0 :(得分:2)

找到解决方案;动画只需要绑定到“From”,它就会以我想要的方式制作动画。

<Grid Margin="{Binding Path=Property1, 
        NotifyOnTargetUpdated=True, 
        Converter={StaticResource Converter1}}">
    <Grid.Triggers><EventTrigger RoutedEvent="Binding.TargetUpdated">
        <BeginStoryboard><StoryBoard>
            <ThicknessAnimation Storyboard.TargetProperty="Margin"
                                Duration="00:00:00.5"
                                From="{Binding Path="Property1" Converter={StaticResource Converter1}}"/>
        </StoryBoard></BeginStoryboard>
    </EventTrigger></Grid.Triggers>
</Grid>

答案 1 :(得分:1)

您可以使用ThicknessAnimation

<BeginStoryboard>
    <Storyboard>    
      <!-- BorderThickness animates from left=1, right=1, top=1, and bottom=1 to
      left=28, right=28, top=14, and bottom=14 over one second. -->
      <ThicknessAnimation
        Storyboard.TargetProperty="Margin"
        Duration="0:0:1.5" FillBehavior="HoldEnd" From="1,1,1,1" To="28,14,28,14" />
    </Storyboard>
  </BeginStoryboard>

您只需要绑定属性FromTo