Не работает DoubleAnimation для Grid колонки
Есть грид основного окна, разделенный на три колонки. Первая колонка для меню - в нее вставлен юзерконтрольная панель коллекции кнопок. В панеле коллекция юзерконтрол кнопок.
<Grid Name="MainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" Name="MenuPanel"></ColumnDefinition>
<ColumnDefinition Width="1"></ColumnDefinition>
<ColumnDefinition Width="1*" Name="MainPanel"></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
Задача: при нажатии на кнопку, первая колонка уменьшается в ширине до 0.
DoubleAnimation anmt = new DoubleAnimation();
anmt.From = MenuPanel.ActualWidth;
anmt.To = 0;
anmt.Duration = new Duration(TimeSpan.FromSeconds(2));
MenuPanel.BeginAnimation(Grid.WidthProperty, anmt);
Никакие ошибки не вылетают, но и анимация не срабатывает.
Что интересно, делаю все то же самое, но не с шириной колонки, а с шириной юзерконтрольной панелью вставленной в нее, то все получается. Но все же, как мне кажется, правильнее будет уменьшать именно ширину колонки. За любые возможные варианты буду крайне признательна!
Ответы (1 шт):
Параметр Width, принадлежащий ColumnDefinition, - формата GridLenght, а не double. Из-за этого анимация не работает. Можно написать класс именно для анимирования gridlenght, подробнее можно найти на персональной странице Marlon Grech
Итого:
GridLengthAnimation anmt = new GridLengthAnimation();
anmt.From = MenuPanel.Width;
anmt.To = new GridLength(20);
anmt.Duration = new Duration(TimeSpan.FromSeconds(1));
MenuPanel.BeginAnimation(ColumnDefinition.WidthProperty, anmt);
Работает прекрасно!