Нужно сделать компонет вроде NumericUpDown в WPF, но где б ещё при изменении цифр они б не просто менялись, а первая цифра б поднималась за пределы компонента, а нижняя — поднималась снизу. С анимацией раньше дело не имел, но написал такое
<Storyboard x:Key="BeforeChangeStoryboard" Duration="0:0:0.3">
<DoubleAnimationUsingKeyFrames BeginTime="0:0:0" Duration="0:0:0.3" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid1">
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-20"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="AfterChangeStoryboard" Duration="0:0:0.3">
<DoubleAnimationUsingKeyFrames BeginTime="0:0:0" Duration="0:0:0.3" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid1">
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="20"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Первая часть вызывается из свойства
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(decimal), typeof(NumericUpDown), new UIPropertyMetadata(0m, (_d, _e) =>
{
if ((decimal)_e.NewValue != (decimal)_e.OldValue)
{
decimal newValue = (decimal)_e.NewValue;
NumericUpDown thisControl = _d as NumericUpDown;
if (newValue >= thisControl.MinValue && newValue <= thisControl.MaxValue)
{
Storyboard animation = thisControl.Resources["BeforeChangeStoryboard"] as Storyboard;
animation.Begin(thisControl.Template.FindName("grid1", thisControl) as Grid);
animation.Completed += (_s, _e2) => thisControl.Text = newValue.ToString();
}
}
}));
А вторая происходит по триггеру
<EventTrigger RoutedEvent="TextBox.TextChanged">
<BeginStoryboard Storyboard="{StaticResource AfterChangeStoryboard}"/>
</EventTrigger>
Реально событие animation.Completed выполняется в совершенно произвольные моменты, часто вызывая зависание. Подскажите, пожалуйста, как отследить тот момент, когда первая анимация реально завершилась.