troubleshooting Question

WPF Control Animation

Avatar of marktoth
marktoth asked on
Microsoft DevelopmentC#
2 Comments1 Solution948 ViewsLast Modified:
I have a button that I want to animate the basic concept is that when the button is clicked it "falls" into place from the left had of the screen.  Once it is in position and clicked the button stands back up on the right side of the screen.  The first animation works successfully but I can't get the second animation to rotate properly.  I think I am confused about how either how the coordinate system is working or how and in what order WPF is rendering the control on the page and how the transforms and rotations are applied.  Below is the .xaml and .xaml.cs files.

<Window x:Class="ScaleTest1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" WindowState="Maximized" Name="mainWin" SizeChanged="mainWin_SizeChanged" StateChanged="mainWin_StateChanged">
    <Window.Resources>
        <Storyboard x:Key="storyBoardRotation" Completed="Storyboard_Completed">
            <DoubleAnimation
        Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
        From="0" To="90" Duration="0:0:2"
        AutoReverse="False"   />
        </Storyboard>
        <Storyboard x:Key="storyBoardRotation2" >
            <DoubleAnimation  
        Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
        From="90" To="180" Duration="0:0:5"
        AutoReverse="False"  />
        </Storyboard>
    </Window.Resources>
    <Canvas>
        <Button Margin="0,0,0,0" Name="ProgressBar1" HorizontalAlignment="Left" Width="24" Height="150" VerticalAlignment="Top" Click="ProgressBar1_Click">
            <Button.RenderTransform>
                <RotateTransform x:Name="rtTest" Angle="0"  />
            </Button.RenderTransform>
        </Button>        
    </Canvas>
</Window>


 private void ProgressBar1_Click(object sender, RoutedEventArgs e)
        {
            Storyboard sb = new Storyboard();// = FindResource("storyBoardRotation") as Storyboard;
            if (rtTest.Angle == 0)
            {
                ProgressBar1.RenderTransformOrigin = new Point(1,1);
                //rtTest.CenterX = 24;
                //rtTest.CenterY = 150;
                sb = FindResource("storyBoardRotation") as Storyboard;
                Storyboard.SetTargetName(((DoubleAnimation)sb.Children[0]), "ProgressBar1");
            }
            else if (rtTest.Angle == 90)
            {
             
                ProgressBar1.RenderTransformOrigin = new Point(1,0);
                //rtTest.CenterX = 174
                //rtTest.CenterY = 24;
                sb = FindResource("storyBoardRotation2") as Storyboard;
                Storyboard.SetTargetName(((DoubleAnimation)sb.Children[0]), "ProgressBar1");
            }
           
                sb.Begin(this);
        }


I believe the problem is in understanding how either ot coordinate system is working and or the order in which transformations and rotations are appliend when the item is rendered.
If I change this line
ProgressBar1.RenderTransformOrigin = new Point(1,0);
in the else if to (.5, .5)
the the button seems to pop back to its orignial position (although rotated) and rotate around its centerpoint.  
Can someone point me in the direction of understanding the rendering pipeline or the co-ordinate system please
ASKER CERTIFIED SOLUTION
gazzzzzzer

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 2 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 2 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros