Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Анимация GridLength c использованием * и auto в одном Grid. / 2 сообщений из 2, страница 1 из 1
11.08.2014, 16:26
    #38717434
Nickopoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анимация GridLength c использованием * и auto в одном Grid.
Реализация GetCurrentValue класса анимации для GridLength:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock) {
			GridLength from = (GridLength) GetValue(GridLengthAnimation.FromProperty);
			GridLength to = (GridLength) GetValue(GridLengthAnimation.ToProperty);
			double fromValue = from.Value;
			double toValue = to.Value;
			if (fromValue < toValue){
				return new GridLength((animationClock.CurrentProgress.Value) * (toValue - fromValue) + fromValue, from.GridUnitType);
			}else{
				return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromValue - toValue) + toValue, to.GridUnitType);
			}
		}



Есть три RowDefinition:
Код: xml
1.
2.
3.
4.
5.
<Grid.RowDefinitions>
	<RowDefinition Name="rowResults" Height="2*"/>
	<RowDefinition Name="rowFavorites" Height="*"/>
	<RowDefinition Height="auto"/>
</Grid.RowDefinitions>



Анимируются по идее первые две строки:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		<Storyboard x:Key="CollapseResults">
			<animations:GridLengthAnimation Storyboard.TargetName="rowResults" Storyboard.TargetProperty="Height" From="2*" To="0*" Duration="0:0:0.5"/>
		</Storyboard>
		<Storyboard x:Key="ShowResults">
			<animations:GridLengthAnimation Storyboard.TargetName="rowResults" Storyboard.TargetProperty="Height" From="{Binding Height, ElementName=rowResults}" To="2*" Duration="0:0:0.5"/>
		</Storyboard>
		<Storyboard x:Key="CollapseFavorites">
			<animations:GridLengthAnimation Storyboard.TargetName="rowFavorites" Storyboard.TargetProperty="Height" From="*" To="0*" Duration="0:0:0.5"/>
		</Storyboard>
		<Storyboard x:Key="ShowFavorites">
			<animations:GridLengthAnimation Storyboard.TargetName="rowFavorites" Storyboard.TargetProperty="Height" From="{Binding Height, ElementName=rowFavorites}" To="*" Duration="0:0:0.5"/>
		</Storyboard>



Если оставлять все время видимой хотя бы одну строку из первых двух, то все работает ОК. Если попытаться скрыть и эту одну строку, то время анимации протекает правильно, но сама анимация не отображается, а по ее завершению получаю то, что и ожидалось - последняя строка (которая "auto"), заполняет все содержимое Grid.

Я понимаю, ПОЧЕМУ так происходит. Вопрос в том, КАК ИСПРАВИТЬ / ЧТО ДОБАВИТЬ, чтобы анимация сокрытия последней видимой строки из первых двух была видна? Вариант размер третье строки поставить в "*" работает, но это на крайний случай - область, в которой находятся пару кнопок, произвольно растягивать не особо хочется...
...
Рейтинг: 0 / 0
12.08.2014, 08:46
    #38717781
Nickopoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анимация GridLength c использованием * и auto в одном Grid.
Черт, не в ту ветку кинул
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Анимация GridLength c использованием * и auto в одном Grid. / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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