Re: [WPF]Анимация не выдаёт событие Completed
От: MxMsk Португалия  
Дата: 12.08.11 06:38
Оценка:
Здравствуйте, Ilya81, Вы писали:

I>Нужно сделать компонет вроде NumericUpDown в WPF, но где б ещё при изменении цифр они б не просто менялись, а первая цифра б поднималась за пределы компонента, а нижняя — поднималась снизу. С анимацией раньше дело не имел, но написал такое

Выложи какой-нибудь примерчик для воспроизведения.

I>Первая часть вызывается из свойства

А тут я бы хотел сделать несколько комментариев:
        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register("Value", typeof(decimal), typeof(NumericUpDown), new UIPropertyMetadata(0m, (_d, _e) =>
            {
                if ((decimal)_e.NewValue != (decimal)_e.OldValue)
                {
                    // Не зачем делать анбоксинг два раза. У тебя выходит один анбоксинг в условии и повторный здесь.
                    // Вынес бы данную строчку в начало метода и использовал newValue в проверке.
                    decimal newValue = (decimal)_e.NewValue;

                    // Далее везде корректнее использовать прямое приведение, вместо as.
                    // as уместно использовать в случае, когда учитывается null.
                    // Иначе можно неожиданно схлопотать NullReferenceException вместо InvalidCastException в месте приведения.
                    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();
                    }
                }
            }));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.