私はUnable to set the property after its animationですので、私のターゲットプロパティからアニメーションを削除したいと思います。完了後にアニメーションを削除するには
上記の質問のanswerによれば、完成後にアニメーションを削除する必要があります。しかしどうすれば?ここで
は私のコードです:それは完了だ後、私はアニメーションを削除することができ
GridLengthAnimation gridAnim = new GridLengthAnimation() {
Name = "gridAnim",
Target = mainGrid.ColumnDefinitions[1],
Duration = new Duration(TimeSpan.FromMilliseconds(1000))
};
gridAnim.From = new GridLength(1, GridUnitType.Star);
gridAnim.To = new GridLength(0, GridUnitType.Star);
gridAnim.BeginAnimation();
:
public class GridLengthAnimation : AnimationTimeline {
static GridLengthAnimation() {
FromProperty = DependencyProperty.Register("From", typeof(GridLength), typeof(GridLengthAnimation));
ToProperty = DependencyProperty.Register("To", typeof(GridLength), typeof(GridLengthAnimation));
}
public override Type TargetPropertyType {
get { return typeof(GridLength); }
}
protected override Freezable CreateInstanceCore() {
return new GridLengthAnimation();
}
public ContentElement Target { get; set; }
public static readonly DependencyProperty FromProperty;
public GridLength From {
get { return (GridLength) GetValue(FromProperty); }
set { SetValue(FromProperty, value); }
}
public static readonly DependencyProperty ToProperty;
public GridLength To {
get { return (GridLength) GetValue(ToProperty); }
set { SetValue(ToProperty, value); }
}
public void BeginAnimation() {
Target.BeginAnimation(ColumnDefinition.WidthProperty, null);
Target.BeginAnimation(ColumnDefinition.WidthProperty, this);
}
public IEasingFunction EasingFunction { get; set; } = new CubicEase() { EasingMode = EasingMode.EaseInOut };
public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock) {
double fromValue = ((GridLength) GetValue(FromProperty)).Value;
double toValue = ((GridLength) GetValue(ToProperty)).Value;
double newValue = 0;
if ((fromValue > toValue)) {
newValue = (1 - EasingFunction.Ease(animationClock.CurrentProgress.Value)) * (fromValue - toValue) + toValue;
return new GridLength(newValue, GridUnitType.Star);
} else {
newValue = EasingFunction.Ease(animationClock.CurrentProgress.Value) * (toValue - fromValue) + fromValue;
return new GridLength(newValue, GridUnitType.Star);
}
}
}
アニメーションを開始するには、私は私のMainWindows.xaml.cs
ファイルで、このようにそれを行いますか?
愚かな質問を、しかし、どこで、どのようにそのアニメーションを設定するのですか? – lokusking
@ lokusking私の質問を編集しました:) – Drarig29