2009-06-02 2 views
3

У меня есть простое приложение WPF, которое содержит пользовательский элемент управления, который анимируется внутри и снаружи парой раскадровки в главном окне. Я оживляю непрозрачность пользовательского элемента управления, scaletransform.scalex и scaletransform.scaley, чтобы вытащить его из и вне поля зрения. Это выглядит круто, за исключением первого запуска. Анимация настроена на 3/10 секунды, хотя я увеличил ее во время тестирования. Я попытался установить значение по умолчанию на долю секунды, чтобы увидеть, есть ли проблема, когда значения свойств, которые я анимация, не деформируются, как ожидалось. Это ничего не делало. Я даже явно называю свою анимацию «скрыть» на загруженном окне, чтобы увидеть, поможет ли это мне установить значения по умолчанию, но это тоже не сработало. Есть ли какая-то инициализация, которую выполняет среда выполнения, когда я запускаю анимацию? Есть ли способ явным образом вызвать такую ​​инициализацию перед показом пользовательского интерфейса? Симптом состоит в том, что контроль не отображается даже до 2/10 секунды в первую анимацию. Иногда это длиннее, и контроль появляется после того, как он полностью анимирован (непрозрачность и размер - это их окончательные значения, когда они наконец появляются).Первый запуск анимации WPF

+0

Когда/как запускается первая анимация? Кроме того, из описанных вами симптомов кажется, что непрозрачность может меняться с другой скоростью/после преобразования масштаба. – rmoore

+0

Первая анимация запускается, так как все анимации - с помощью мыши. Я делаю это в коде позади, поэтому я могу отметить событие как обработанное, если необходимо. Прозрачность отлично работает и во всех других анимациях. В принципе, нет никакой разницы в коде между первой анимацией и любой другой анимацией. Мне было интересно, является ли среда выполнения WPF оптимизацией (мой контроль скрыт по ScaleTransform и Opacity по умолчанию), и это цена, которую я плачу за автоматическую оптимизацию памяти или что-то в этом роде. – Rich

+0

Как будто во время выполнения WPF «oh, этот элемент управления не доступен для просмотра сразу же после того, как ScaleTransforms и Opacity равны 0, давайте загрузим это динамически позже», и в результате он играет в catchup, пока я ожидаю isntantly анимировать себя в поле зрения. – Rich

ответ

1

Похоже, вы устанавливаете DataContext UserControl прямо перед анимацией. Предположительно, у вас есть привязка, которая создает визуальные объекты и добавляет их в визуальное дерево, в то время как анимация должна начинаться. Для этого требуется обработка, за которой работает анимация. Способ избежать этого состоит в том, чтобы создать управляемый экземпляр (с набором DataContext), но скрытый, поэтому создание визуального объекта не нужно выполнять во время анимации. (через моего сотрудника Тима Ли)

+0

Хорошо, вы абсолютно правы ... и это была моя первоначальная догадка. Тем не менее, среда выполнения пытается быть слишком умной, потому что это хорошо. Если я попытаюсь каким-либо образом скрыть его из вида (непрозрачность, отрицательный маркер, scaletransform, translatetransform), он делает то же самое. Если я разрешаю его просматривать, мне даже не нужно сначала устанавливать DataContext ... первая анимация идет гладко. Это почти так, как будто мне нужно обмануть время исполнения, подумав, что он доступен для просмотра, когда на самом деле это не так. Это, или мне нужно знать, как явным образом сказать это, чтобы построить визуальное дерево. Последний чувствует себя менее взломанным. – Rich

+0

Я понимаю, что эта тема древняя, но как вы в конечном итоге решили эту проблему? Даже установка соответствующих элементов управления на 1 ширину не помогла. Я относительно новичок в WPF и поэтому не получил никаких скрытых подсказок между строками. – Harti

Смежные вопросы