Giridhaar 0 Newbie Poster

I have been following this tutorial (http://www.codeproject.com/Articles/18379/WPF-Tutorial-Part-Writing-a-custom-animation-cla) to try and adjust the Width of one of my Grids upon a Button click.

<Grid Grid.Row="2">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="leftGrid"  Width="7*"/>
            <ColumnDefinition Name="rightGrid" Width="3*"/>                
        </Grid.ColumnDefinitions>

        <i:Interaction.Triggers>
            <ei:PropertyChangedTrigger Binding="{Binding State}">
                <ei:GoToStateAction StateName="{Binding State}" />
            </ei:PropertyChangedTrigger>
        </i:Interaction.Triggers>


        <VisualStateManager.VisualStateGroups >
            <VisualStateGroup x:Name="VisualStateGroup">
                <VisualState x:Name="Expanded">
                    <Storyboard>
                    <local:GridLengthAnimation
                                    Storyboard.Target="{Binding ElementName=rightGrid}"
                                    Storyboard.TargetProperty="Width"
                                    Duration="0:0:1" To="3*"/>
                    </Storyboard>                       
                </VisualState>
                <VisualState x:Name="Contracted">
                    <Storyboard>
                    <local:GridLengthAnimation
                                    Storyboard.Target="{Binding ElementName=rightGrid}"
                                    Storyboard.TargetProperty="Width"
                                    Duration="0:0:1" To="0*"/>
                    </Storyboard>                                             
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

GridLengthAnimation

public class GridLengthAnimation : AnimationTimeline
{

    public static readonly DependencyProperty ToProperty =
    DependencyProperty.Register(
        "To", typeof(GridLength), typeof(GridLengthAnimation));

    public GridLength To
    {
        get { return (GridLength)GetValue(GridLengthAnimation.ToProperty); }
        set { SetValue(GridLengthAnimation.ToProperty, value); }
    }

    public override Type TargetPropertyType
    {
        get { return typeof(GridLength); }
    }

    protected override Freezable CreateInstanceCore()
    {
        return new GridLengthAnimation();
    }

    public override object GetCurrentValue(
        object defaultOriginValue, object defaultDestinationValue,
        AnimationClock animationClock)
    {
        var from = (GridLength)defaultOriginValue;

        if (from.GridUnitType != To.GridUnitType ||
            !animationClock.CurrentProgress.HasValue)
        {
            return from;
        }

        var p = animationClock.CurrentProgress.Value;

        Console.WriteLine("To Value = " + To.Value);

        return new GridLength(
            (1d - p) * from.Value + p * To.Value,
            GridUnitType.Star);
    }
}

The moment I click a Button and change the value of State, I get the above error.

I don't understand why I'm getting the error because GridLengthAnimation returns a value of GridLength not Double. As stated in the link I provided, isn't this what is required for Row/Column Definitions?

Could someone please tell me what the issue may be?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.20 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.