wpfxamlanimationgridlength

How to discrete animate GridLength from "Auto" to "*"?


I need to animate this property using a Storyboard. Is writing your own animation is a best choice?


Solution

  • No, it is quite possible using the standard XAML:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" x:Name="col0"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.Resources>
            <Storyboard x:Key="sbCol0ToAuto">
                <ObjectAnimationUsingKeyFrames 
                    BeginTime="0" Duration="0"
                    Storyboard.TargetName="col0" Storyboard.TargetProperty="Width">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <GridLength>*</GridLength>
                         </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                 </ObjectAnimationUsingKeyFrames>
             </Storyboard>
        </Grid.Resources>
    ...
    </Grid>
    

    And even easier back to Auto:

    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static GridLength.Auto}">