|
Storyboard
|
|||
---|---|---|---|
#18+
Народ, я вот сделал анимашку1, которая анимирует высоту listbox по клику на кнопку. создал анимашку2 обратную, которая по своей сути обратная анимация анимашки1. как бы сделать, чтобы анимашка2 включалась с того момента, где закончится анимашка1 ? (это сценарий, нажатия на кнопку, когда анимашка1 еще не закончилась) я попробовал конечо : Код: vbnet 1. 2.
то есть ставлю старт анимашки2 , там где поставил паузу для анимашки1, НО ведь дергается маленько. и это маленько я не знаю как побороть. так как длина анимашки1 и анимашки2 всего 1 секунда. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:17 |
|
Storyboard
|
|||
---|---|---|---|
#18+
хм, возник вопрос, Код: xml 1. 2. 3. 4.
а тут easing установлена, может ли это влиять ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:21 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, А можно поподоробнее немного? ТЫ наводишь курсором мыши (MouseEnter) и у тебя ListBoxItem увеличивается в размерах. ТЕперь вопрос в какой момент тебе надо уменьшить размер? Когда ты уводишь мышь с итема? Если да - то не вижу смысла останавливать анимацию и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:36 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Предыдущий вопрос снимаю, так как ты просто решил к кнопке привязать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:40 |
|
Storyboard
|
|||
---|---|---|---|
#18+
ну смысл в том, что я развернул listbox, а потом опять сразу нажал кнопку и запустилась анимашка2 - которая сворачивает listbox. и вот анимашшка2 стартует я бы сказал, не прям с тех значений, на которых завершилась анимашка1 и по этой причине видно подергивание. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:46 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Попробуй в первой анимации выставить это FillBehavior.HoldEnd ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:51 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, там выставлено. это поумолчанию везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 17:57 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, А можешь код вставить? Я поиграюсь и попробую выяснить ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:00 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Просто конкретной мысли пока нет - хотелось бы глянуть код. и от него отталкиваться ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:07 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Знаешь какая мысль еще в голову пришла. Ты используешь анимацию ключевого кадра (EasingDoubleKeyFrame). Не может быть такого, что когда происходит изменение состояния - то в момент нажатия Height попадает в промежуток между пикселами и из-за этого дергаеься? я понимаю что бредовая мысль - но мало ли ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:21 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, В общем если не сложно - то давай код - попробую разобраться. А то получается гадание на кофейной гуще. Согласно тому что ты представил, EasingDoubleKeyFrame никак не должен влиять. Это как бы поданимация всей анимации (так как это анимация ключевого кадра). У тебя всего их две - то есть начальное состояние и конечное. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:25 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, вот приложил. попробуй, прям сразу нажать, когда анимашка1 еще в самом начале и тогда произойдет прыжок почти до низу и начнется анимашка2. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:28 |
|
Storyboard
|
|||
---|---|---|---|
#18+
a1.Seek(Me, a2.GetCurrentTime(Me) , TimeSeekOrigin.BeginTime) пофикси там строчку. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 18:37 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Кстати у тебя в строчке кода <Storyboard x:Key="Storyboard2"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="listBox"> <EasingDoubleKeyFrame KeyTime="0" Value="{Binding ElementName=listBox, Path=ActualHeight}"/> <EasingDoubleKeyFrame KeyTime="0:0:1" Value="41"/> </DoubleAnimationUsingKeyFrames> </Storyboard> Я сделал изменение - вместо Value="300". Иначе если ты быстро нажмешь кнопку то увидишь, как резко увеличивается до 300 высота и поток уменьшается до 41. Поэтому обратную анимацию надо делать от актуальной длины. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 20:19 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, ты крут. спасибо. а я думал что метод seek высчитывает эти value на основе своего значения. по идее он и должен это делать, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 20:26 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, По идее да, я просто Seek пока не использовал. И кстати тебе осталось только решить вопрос с возвратом анимации обратно. Обрати внимание, что прямо у тебя анимация длится 1 сек, а обратно тоже 1 сек. Если ты остановишь анимацию на середине, то она обратно будет возвращаться в два раза медленее (так как пройдет в два раза меньше пути за то же самое время что должна пройти весь путь). Поэтому тут немного надо тебе тоже динамически подсчитать время - если конечно хочешь чтобы туда и обратно с одинаковой скоростью кнопка перемещалась ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 20:28 |
|
Storyboard
|
|||
---|---|---|---|
#18+
да слушай, я привязал к actualheight и sb1 и сталов просто великолепно. есть там ньанс с тем что actualheight 0 при инициализации. и чтото перебрал я способов разных, не понял как обновить actual величины при загрузке окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 21:07 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, да я весь код убрал собственно :) теперь он не нужен. вопрос только в том, что sb1 даже привязанный так: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
все равно в value ему приходит 0 первый раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 21:09 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Ничего страшного. ActualHeight - свойство зависимости, а значит у него есть Метаданные. Значение по умолчанию метаданных можно переопределять. У тебя код на VB, не хочется в него вникать))), я на C# просто пишу. Тебе надо использовать OverrideMetadata, чтобы переопределить значение по умолчанию встроенного свойства зависимости - укажешь то значение, которое тебе нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 21:31 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, хм. а если у меня контрол такого поведения. и везде я задаю разные начальные height, то не прокатит? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 21:57 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, То что ты задаешь в XAML - это локальное значение - оно имеет приоритет перед значением по умолчанию. Как только хотя бы раз Height изменится - то значение по умолчанию ДЛЯ ДАННОГО ЭЛЕМЕНТА перекроется этим новым значением. Изменения Height естественно другие эелементы не видят. Единственное что, значение по умолчанию будет задано для всех элементов, для которых ты сделаешь переопределение метаданных(например ListBox). Как вариант - если не хочешь изменять значения по умолчанию у других элементов - можешь задать SetValue для Height для данного элемента, тогда ActualHeight также изменится на это заданное значение. SetValue задашь в коде (не в XAML). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 22:20 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, И учти, когда ты явно задаешь Height, то значения по умолчанию не используются. Точнее сказать, если ты у элемента задал явно height (например 300), то ActualHeight уже не будет равн 0, оно будет равен 300. Значение по умолчанию используется только тогда - когда ты нигде не указал явно значение Height ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 22:22 |
|
Storyboard
|
|||
---|---|---|---|
#18+
unknownfromrus, спасибо, что тут. смотри что я накопал. ведь не должен быть ноль хотя бы в height, согласен? потому что он задан. ну вот : BindingOperations.IsDataBound(FindResource("Storyboard1"), Storyboard.AccelerationRatioProperty) вот такая штука на loaded формы, позволяет как сказано, прочухатся анимашке, что он прибиндина :) тут нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 22:26 |
|
Storyboard
|
|||
---|---|---|---|
#18+
AlexeiK, Решил твой вопрос))). Добавь в определение ListBox MaxHeight="300" MinHeight="41" к тому что у тебя уже есть. А первую анимацию чуток подправь до такого вида: <Storyboard x:Key="Storyboard1"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="listBox"> <EasingDoubleKeyFrame KeyTime="0" Value="41"/> <EasingDoubleKeyFrame KeyTime="0:0:1" Value="{Binding ElementName=listBox, Path=MaxHeight}"/> </DoubleAnimationUsingKeyFrames> </Storyboard> Должно все быть все гуд ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2012, 23:15 |
|
|
start [/forum/topic.php?fid=21&fpage=42&tid=1441896]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 524ms |
0 / 0 |