想用CompositionTarget.Rendering方法做一个小动画,在前台画一个矩形(代码中的rect),然后当鼠标按下时,记录鼠标按下状态,然后拖动是,根据RectMove方法中的InitialAngle 变量,来实现矩形的缓动效果,但是现在的代码没有拖动,当鼠标按下时,矩形就开始移动了,而当把CompositionTarget.Rendering+=RectMove;代码,只写入move事件中时,就什么效果都没有了(矩形就不动了),请高手讲讲CompositionTarget.Rendering方法吧~using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;namespace WpfApplication7
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public bool click=false;//用来判断鼠标是否是点击状态
        public double speed=0.01;
        public Point mouseNow , mouseStart;
        public double mouseMove;        public double InitialAngle;
        public MainWindow( )
        {
            this.InitializeComponent( );
            this.rect.Margin=new Thickness( 300 , 300 , 0 , 0 );            // 在此点下面插入创建对象所需的代码。
        }        private void LayoutRoot_MouseMove( object sender ,System.Windows.Input.MouseEventArgs e )
        {
            // TODO: Add event handler implementation here.
            if ( click )
            {
                mouseNow=Mouse.GetPosition( this );
                mouseMove=mouseNow.X-mouseStart.X;
                mouseStart=mouseNow;                CompositionTarget.Rendering+=RectMove;
            }
        }        private void RectMove( object sender , EventArgs e )
        {
            if ( Math.Abs( this.mouseNow.X - this.mouseStart.X ) < 1 )
            {
                this.mouseNow.X = this.mouseStart.X;
            }
            this.InitialAngle += ( ( this.mouseNow.X - this.mouseStart.X ) *0.01 ) /2.2;            this.mouseStart.X += ( ( this.mouseNow.X - this.mouseStart.X ) *0.01 );
            if ( ( Math.Abs( this.mouseNow.X - this.mouseStart.X ) < 1 ) )
            {
                CompositionTarget.Rendering -= this.RectMove;
            }
            //this.rect.Margin=new Thickness( this.rect.Margin.Left-InitialAngle , rect.Margin.Top , 0 , 0 );
            Canvas.SetLeft( this.rect , this.rect.Margin.Left-InitialAngle );        }        private void LayoutRoot_MouseLeftButtonDown( object sender ,System.Windows.Input.MouseButtonEventArgs e )
        {
            // TODO: Add event handler implementation here.
            click=true;
            mouseStart=Mouse.GetPosition( this );
            CompositionTarget.Rendering+=RectMove;
        }        private void LayoutRoot_MouseLeftButtonUp( object sender ,System.Windows.Input.MouseButtonEventArgs e )
        {
            // TODO: Add event handler implementation here.
            click=false;
            CompositionTarget.Rendering-=RectMove;
        }
    }
}