Здравствуйте, 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();
}
}
}));