我对动画绑定属性有一个简单的问题。这是一个简单的例子来说明它:
视图模型:
public class ViewModel
{
private double myProperty;
public double MyProperty
{
get { return myProperty; }
set { myProperty = value; /* Break point here */ }
}
public ViewModel()
{
MyProperty = 20;
}
}
我的控制:
public class MyControl : Button
{
protected override void OnClick()
{
base.OnClick();
Height = ActualHeight + 20;
}
}
我的动画控件:
public class MyAnimatedControl : Button
{
protected override void OnClick()
{
base.OnClick();
DoubleAnimation a = new DoubleAnimation(ActualHeight + 20, new Duration(TimeSpan.FromMilliseconds(500)));
this.BeginAnimation(HeightProperty, a);
}
}
主窗口:
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new ViewModel();
InitializeComponent();
}
}
<Grid>
<StackPanel>
<local:MyAnimatedControl Height="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Content="Animated"/>
<local:MyControl Height="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Content="Normal 1"/>
<local:MyControl Height="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Content="Normal 2"/>
</StackPanel>
</Grid>
我有两个继承自的控件(MyControl 和 MyAnimated Control),它们的 Height 属性绑定(两种方式)到 ViewModel 中的 MyProperty 属性。
单击控件时,它们的 Height 属性会增大。 MyControl 为其分配一个新值,MyAnimatedControl 为其设置动画。
问题 :
当我单击其中一个 MyControl 时,绑定正常工作,所有控件的高度都更新,断点在 ViewModel 中工作。但是,当我单击 MyAnimatedControl 时,绑定似乎不再起作用:它单独增长,并且绑定不再起作用,而两个普通控件仍然一起增长。它不再与其他控件共享相同的高度。
有没有办法对动画依赖属性进行操作绑定,这将在动画过程中更新 ViewModel?我读这个帖子 https://stackoverflow.com/questions/511345/bind-to-animated-property-wpf但它没有回答它。
Thanks.