powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Storyboard
25 сообщений из 49, страница 1 из 2
Storyboard
    #37691962
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, я вот сделал анимашку1, которая анимирует высоту listbox по клику на кнопку.
создал анимашку2 обратную, которая по своей сути обратная анимация анимашки1.

как бы сделать, чтобы анимашка2 включалась с того момента, где закончится анимашка1 ?
(это сценарий, нажатия на кнопку, когда анимашка1 еще не закончилась)

я попробовал конечо :
Код: vbnet
1.
2.
anima1.pause(me)
anima2.seek(me,anima1.getcurrenttime,begintime)


то есть ставлю старт анимашки2 , там где поставил паузу для анимашки1, НО ведь дергается маленько.
и это маленько я не знаю как побороть.
так как длина анимашки1 и анимашки2 всего 1 секунда.
...
Рейтинг: 0 / 0
Storyboard
    #37691972
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм, возник вопрос,

Код: xml
1.
2.
3.
4.
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="listBox" Storyboard.TargetProperty="(FrameworkElement.Height)">
                <EasingDoubleKeyFrame KeyTime="0" Value="47" />
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="327" />
            </DoubleAnimationUsingKeyFrames>



а тут easing установлена, может ли это влиять ?
...
Рейтинг: 0 / 0
Storyboard
    #37692017
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

А можно поподоробнее немного?
ТЫ наводишь курсором мыши (MouseEnter) и у тебя ListBoxItem увеличивается в размерах.
ТЕперь вопрос в какой момент тебе надо уменьшить размер? Когда ты уводишь мышь с итема? Если да - то не вижу смысла останавливать анимацию и т.п.
...
Рейтинг: 0 / 0
Storyboard
    #37692032
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Предыдущий вопрос снимаю, так как ты просто решил к кнопке привязать
...
Рейтинг: 0 / 0
Storyboard
    #37692058
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну смысл в том, что я развернул listbox, а потом опять сразу нажал кнопку и запустилась анимашка2 - которая сворачивает listbox.
и вот анимашшка2 стартует я бы сказал, не прям с тех значений, на которых завершилась анимашка1 и по этой причине видно подергивание.
...
Рейтинг: 0 / 0
Storyboard
    #37692083
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Попробуй в первой анимации выставить это FillBehavior.HoldEnd
...
Рейтинг: 0 / 0
Storyboard
    #37692105
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

там выставлено.
это поумолчанию везде.
...
Рейтинг: 0 / 0
Storyboard
    #37692114
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

А можешь код вставить?
Я поиграюсь и попробую выяснить
...
Рейтинг: 0 / 0
Storyboard
    #37692135
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Просто конкретной мысли пока нет - хотелось бы глянуть код. и от него отталкиваться
...
Рейтинг: 0 / 0
Storyboard
    #37692171
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Знаешь какая мысль еще в голову пришла.
Ты используешь анимацию ключевого кадра (EasingDoubleKeyFrame).
Не может быть такого, что когда происходит изменение состояния - то в момент нажатия Height попадает в промежуток между пикселами и из-за этого дергаеься? я понимаю что бредовая мысль - но мало ли
...
Рейтинг: 0 / 0
Storyboard
    #37692177
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

В общем если не сложно - то давай код - попробую разобраться. А то получается гадание на кофейной гуще.
Согласно тому что ты представил, EasingDoubleKeyFrame никак не должен влиять. Это как бы поданимация всей анимации (так как это анимация ключевого кадра). У тебя всего их две - то есть начальное состояние и конечное.
...
Рейтинг: 0 / 0
Storyboard
    #37692180
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

вот приложил.
попробуй, прям сразу нажать, когда анимашка1 еще в самом начале
и тогда произойдет прыжок почти до низу и начнется анимашка2.
...
Рейтинг: 0 / 0
Storyboard
    #37692201
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a1.Seek(Me, a2.GetCurrentTime(Me) , TimeSeekOrigin.BeginTime)
пофикси там строчку.
...
Рейтинг: 0 / 0
Storyboard
    #37692315
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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. Поэтому обратную анимацию надо делать от актуальной длины.
...
Рейтинг: 0 / 0
Storyboard
    #37692321
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

ты крут.
спасибо.
а я думал что метод seek высчитывает эти value на основе своего значения.
по идее он и должен это делать, да?
...
Рейтинг: 0 / 0
Storyboard
    #37692327
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

По идее да, я просто Seek пока не использовал.
И кстати тебе осталось только решить вопрос с возвратом анимации обратно.
Обрати внимание, что прямо у тебя анимация длится 1 сек, а обратно тоже 1 сек. Если ты остановишь анимацию на середине, то она обратно будет возвращаться в два раза медленее (так как пройдет в два раза меньше пути за то же самое время что должна пройти весь путь).
Поэтому тут немного надо тебе тоже динамически подсчитать время - если конечно хочешь чтобы туда и обратно с одинаковой скоростью кнопка перемещалась
...
Рейтинг: 0 / 0
Storyboard
    #37692370
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да слушай, я привязал к actualheight и sb1 и сталов просто великолепно.
есть там ньанс с тем что actualheight 0 при инициализации.
и чтото перебрал я способов разных, не понял как обновить actual величины при загрузке окна.
...
Рейтинг: 0 / 0
Storyboard
    #37692372
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

да я весь код убрал собственно :) теперь он не нужен.

вопрос только в том, что sb1 даже привязанный так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <Storyboard x:Key="Storyboard1">
			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="listBox">
                <EasingDoubleKeyFrame KeyTime="0" Value="{Binding ElementName=listBox, Path=Height}"/>
				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="300"/>
			</DoubleAnimationUsingKeyFrames>
		</Storyboard>
        <Storyboard x:Key="Storyboard2">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="listBox">
                <EasingDoubleKeyFrame KeyTime="0" Value="{Binding ElementName=listBox, Path=Height}"/>
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="41"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>



все равно в value ему приходит 0 первый раз.
...
Рейтинг: 0 / 0
Storyboard
    #37692399
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Ничего страшного.
ActualHeight - свойство зависимости, а значит у него есть Метаданные. Значение по умолчанию метаданных можно переопределять. У тебя код на VB, не хочется в него вникать))), я на C# просто пишу.

Тебе надо использовать OverrideMetadata, чтобы переопределить значение по умолчанию встроенного свойства зависимости - укажешь то значение, которое тебе нужно.
...
Рейтинг: 0 / 0
Storyboard
    #37692443
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

хм. а если у меня контрол такого поведения. и везде я задаю разные начальные height, то не прокатит?
...
Рейтинг: 0 / 0
Storyboard
    #37692476
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

То что ты задаешь в XAML - это локальное значение - оно имеет приоритет перед значением по умолчанию.
Как только хотя бы раз Height изменится - то значение по умолчанию ДЛЯ ДАННОГО ЭЛЕМЕНТА перекроется этим новым значением.
Изменения Height естественно другие эелементы не видят. Единственное что, значение по умолчанию будет задано для всех элементов, для которых ты сделаешь переопределение метаданных(например ListBox).

Как вариант - если не хочешь изменять значения по умолчанию у других элементов - можешь задать SetValue для Height для данного элемента, тогда ActualHeight также изменится на это заданное значение. SetValue задашь в коде (не в XAML).
...
Рейтинг: 0 / 0
Storyboard
    #37692480
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

И учти, когда ты явно задаешь Height, то значения по умолчанию не используются. Точнее сказать, если ты у элемента задал явно height (например 300), то ActualHeight уже не будет равн 0, оно будет равен 300.

Значение по умолчанию используется только тогда - когда ты нигде не указал явно значение Height
...
Рейтинг: 0 / 0
Storyboard
    #37692489
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unknownfromrus,

спасибо, что тут.
смотри что я накопал.
ведь не должен быть ноль хотя бы в height, согласен? потому что он задан.
ну вот :
BindingOperations.IsDataBound(FindResource("Storyboard1"), Storyboard.AccelerationRatioProperty)
вот такая штука на loaded формы, позволяет как сказано, прочухатся анимашке, что он прибиндина :)
тут нашел.
...
Рейтинг: 0 / 0
Storyboard
    #37692514
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прикладываю файл
...
Рейтинг: 0 / 0
Storyboard
    #37692544
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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>

Должно все быть все гуд
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Storyboard
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]