众所周知,在wpf中,使用模型绑定可以控制元素的依赖属性变化,但是这样的效果是瞬变的(比如元素的高度),而大多动画方案,都是在前台xaml中指定元素名使用DoubleAnimation其使其具有渐变的效果,但是若将已经后台绑定的属性应用于动画,这貌似会解除绑定关系.那么该怎样做才可以既不解除绑定关系,又能使绑定的依赖属性的变化是渐变的呢?例子如下:
前台:
<StackPanel>
<Rectangle height ="{Binding Height}" x:Name="rect" />
<Button Content="Change"/>
</StackPanel>
ViewModel:
...
private double height = 400;
public double Height{
get{
return height;
}
set{
height = value;
NotifyPropertyChanged(nameof(Height));
}
}
...
那么我现在想实现的是按钮点击后,Rectangle的高度从400变为200,有一点动画过程,那么我该怎样做才能使Rectangle的高度变化既有渐变效果,也不会使其丢失与后台属性的绑定关系呢?
可以这么搞
private void Button_Click(object sender, RoutedEventArgs e) { DoubleAnimation heightAnimation = new DoubleAnimation(50, 100, new Duration(TimeSpan.FromSeconds(0.8))); Self.BeginAnimation(Button.HeightProperty, heightAnimation); }
Rectangle 可以在以command 参数的方式传递到ViewModel.
Height继续保留绑定,在改变的时候在后台创建故事版。
有点破环MVVM的感觉。哈哈哈
你可以逐渐变化高度,比如400,过一定时间,减少高度385,再过一定时间,370,,,以此类推
那就得设置时钟什么的,反而更加麻烦了。