//private double newTop = 50;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="origin">which raise the event</param>
        /// <param name="dst">new postion for the original control</param>
        /// <param name="screen">backgroud image split</param>
        public SplitScreen(Button origin,Point dst, Grid screen): this()
        {
            //this.Background = screen.Background;

            //copy button
            buttonOldPoint = origin.TranslatePoint(new Point(0, 0), screen);

            //TO-DO add some logic
            buttonNewPoint.X = buttonOldPoint.X ;
            buttonNewPoint.Y = buttonOldPoint.Y ;

            splitLine = buttonOldPoint.Y + interval + origin.Height;

            button = new ProgressButton();

            button.Content = origin.Content;
            button.Width = origin.Width;
            button.Height = origin.Height;

            button.FirstImage = (origin as ProgressButton).FirstImage;
            button.SecondImage = (origin as ProgressButton).SecondImage;
            button.CoverImage = (origin as ProgressButton).CoverImage;
            button.RotatedImage = (origin as ProgressButton).RotatedImage;

            button.State = State.Normal;
            button.Click += new RoutedEventHandler(button_Click);

            Canvas.SetLeft(button, buttonOldPoint.X);
            Canvas.SetTop(button, buttonOldPoint.Y);

            this.canvas.Children.Add(button);

            //copy background
            var background = new RenderTargetBitmap((int)screen.ActualWidth, (int)screen.ActualHeight, 
                                                    96d, 96d, PixelFormats.Pbgra32);
            background.Render(screen);

            int height = (int)background.Height;
            int width = (int)background.Width;
            
            var top = new CroppedBitmap(background, new Int32Rect(0, 0, width, (int)splitLine));
            var bottom = new CroppedBitmap(background, new Int32Rect(0, (int)splitLine, width, (int)(height - splitLine)));

            bg_top.Source = top;
            bg_bottom.Source = bottom;

            bg_top.Width = width;
            bg_top.Height = splitLine;

            bg_bottom.Width = width;
            bg_bottom.Height = height - splitLine;

            //generata container
            this.Container.Width = width;
            this.Container.Height = 300;

            //animation
            double verticalMove = buttonOldPoint.Y - buttonNewPoint.Y;

            translate(bg_top, 0, -verticalMove);
            translate(button, buttonOldPoint.Y, buttonNewPoint.Y);
            translate(Container, splitLine, splitLine - verticalMove);
            translate(bg_bottom, splitLine, splitLine + (Container.Height - verticalMove));
        }
        //private double newTop = 50;

        /// <summary>
        ///
        /// </summary>
        /// <param name="origin">which raise the event</param>
        /// <param name="dst">new postion for the original control</param>
        /// <param name="screen">backgroud image split</param>
        public SplitScreen(Button origin, Point dst, Grid screen) : this()
        {
            //this.Background = screen.Background;

            //copy button
            buttonOldPoint = origin.TranslatePoint(new Point(0, 0), screen);

            //TO-DO add some logic
            buttonNewPoint.X = buttonOldPoint.X;
            buttonNewPoint.Y = buttonOldPoint.Y;

            splitLine = buttonOldPoint.Y + interval + origin.Height;

            button = new ProgressButton();

            button.Content = origin.Content;
            button.Width   = origin.Width;
            button.Height  = origin.Height;

            button.FirstImage   = (origin as ProgressButton).FirstImage;
            button.SecondImage  = (origin as ProgressButton).SecondImage;
            button.CoverImage   = (origin as ProgressButton).CoverImage;
            button.RotatedImage = (origin as ProgressButton).RotatedImage;

            button.State  = State.Normal;
            button.Click += new RoutedEventHandler(button_Click);

            Canvas.SetLeft(button, buttonOldPoint.X);
            Canvas.SetTop(button, buttonOldPoint.Y);

            this.canvas.Children.Add(button);

            //copy background
            var background = new RenderTargetBitmap((int)screen.ActualWidth, (int)screen.ActualHeight,
                                                    96d, 96d, PixelFormats.Pbgra32);

            background.Render(screen);

            int height = (int)background.Height;
            int width  = (int)background.Width;

            var top    = new CroppedBitmap(background, new Int32Rect(0, 0, width, (int)splitLine));
            var bottom = new CroppedBitmap(background, new Int32Rect(0, (int)splitLine, width, (int)(height - splitLine)));

            bg_top.Source    = top;
            bg_bottom.Source = bottom;

            bg_top.Width  = width;
            bg_top.Height = splitLine;

            bg_bottom.Width  = width;
            bg_bottom.Height = height - splitLine;

            //generata container
            this.Container.Width  = width;
            this.Container.Height = 300;

            //animation
            double verticalMove = buttonOldPoint.Y - buttonNewPoint.Y;

            translate(bg_top, 0, -verticalMove);
            translate(button, buttonOldPoint.Y, buttonNewPoint.Y);
            translate(Container, splitLine, splitLine - verticalMove);
            translate(bg_bottom, splitLine, splitLine + (Container.Height - verticalMove));
        }