Мигает в моей анимации перехода wpf
Я пытаюсь добиться пользовательской анимации перехода с эффектом тени на изображении. Я использую систему, которую я сделал для задания графического упрощения функций Безье, и я обрабатываю все данные сплайна в классе под названием Spline.
Я анимирую свойство времени, отправленное статическому методу Сплайна, чтобы вычислить данные Безье для упрощения. затем я получаю вычисленное значение, которое отправляю в свойство Time моего эффекта шейдера, но я не могу использовать beginAnimation для этого перехода, потому что класс, воспроизводящий анимацию, не является пользовательским интерфейсом и уже наследуется от абстрактного класса.
Если я хочу использовать beginAnimation, я должен заставить абстрактный класс наследовать от dependencyObject, чтобы использовать свойство зависимости в качестве параметра BeginAnimation, но я получаю эту ошибку
this.BeginAnimation(TimeProperty, anim);
"MyClass" не содержит определения для BeginAnimation и метода расширения. BeginAnimation, принимающий аргумент frist типа "MyClass", может быть найден (если вы пропустили директиву using или ссылку на сборку)
вся эта система зависимостей / анимации не соответствует моим потребностям, так как я не работаю над пользовательским интерфейсом напрямую, и я полностью застрял сейчас
Любая идея?
(Я использовал dispatcherTimer, чтобы сделать трюк, но когда анимация закончилась, я могу видеть цвет фона моего приложения в течение полсекунды, а затем наконец появляется мое второе изображение, но я не хочу этого поведения, так как оно будет продаваться...)
2 ответа
Я наконец-то использовал Storyboard для достижения этой цели, используя наследование объекта Dependency в моем абстрактном классе.
И даже если не очень хорошо использовать систему Sotryboard / dependencyProperty для не-пользовательского интерфейса (на мой взгляд), это работает.
У меня есть раскадровка для анимации свойства DependencyProperty с именем Time в MyClass от 0 до 1. В PropertyChangedCallback of Time я вычисляю новое значение времени в зависимости от моей пользовательской функции замедления сплайна, а затем привязываю его к свойству Progress моего шейдера.
все равно спасибо за беспокойство.
Используйте анимацию ключевого кадра. Вы можете добавить отдельные кадры к нему. Например, вы можете скрыть что-то каждый второй ключевой кадр.