想用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;
}
}
}
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;
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货