Не работает 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 шт):

Автор решения: Svetlana Shreder

Параметр 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);

Работает прекрасно!

→ Ссылка