Move事件,拖动控件的问题,内附代码,请大家帮帮忙吧~!

ylly2508 ylly2508 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用鼠标拖动容器,然后让容器上的控件按照鼠标走的值去走,用的是故事版,但是拖动快的时候,为什么会串位呢?

public Point mouseStart , mouseEnd;//记录鼠标的起始点,来计算移动位置
public void MouseLeftDown( object sender , EventArgs e )
{
mouseStart=Mouse.GetPosition( this );
}
public void Move( object sender , EventArgs e )
{
mouseEnd=Mouse.GetPosition( this );
double y=mouseEnd.Y-mouseStart.Y;
//Menumain 是用户控件,grid是容器
Menumain menu=grid.Children[1] as Menumain;
DB.DB.timeSpan=0;
items item=null;
if ( y!=0 )
{
for ( int i=0 ; i<menu.sdf.Length ; i++ )
{
item=menu.sdf[i] as items;

if ( item.Margin.Top+y>=336 && item.Margin.Top+y<=528.5 )
{
storyTapMove( item , 216 , item.Margin.Top+menuSlidePointY( item.Margin.Top , i , y ) , DB.DB.timeSpan );
DB.DB.NowIng=i+1;//这个是记录中心位置的

}
else
{

storyTapMove( item , 240, item.Margin.Top+menuSlidePointY( item.Margin.Top , i , y ) , DB.DB.timeSpan );
}
}

}

}


#region 返回控件应移动的距离(正常值和特殊值的正常比例)
/// <summary>
/// 返回控件应移动的距离(正常值和特殊值的正常比例)
/// </summary>
/// <param name="top"></param>
/// <param name="i"></param>
/// <param name="y"></param>
/// <returns></returns>
public float menuSlidePointY( double top , int i , float y )
{
float temp=y/70;
if ( top>382 &&top <675 )
{
return 293*temp;
}
else if ( top<382 && top>290 )
{
return 92*temp;
}
return y;
}
#endregion


#region Thickness移动主菜单动画(按margin移动)
/// <summary>
/// Thickness移动主菜单动画(按margin移动)
/// </summary>
/// <param name="item">移动控件</param>
/// <param name="setLeft">控件靠左侧宽度</param>
/// <param name="setTop">控件靠顶部宽度</param>
public void storyTapMove( items item , double setLeft , double setTop , int timeSpan )
{
Storyboard sb = new Storyboard( );
//sb.FillBehavior = FillBehavior.Stop;
//item.BeginStoryboard( sb , HandoffBehavior.SnapshotAndReplace , true );

TransformGroup tfg = new TransformGroup( );
ScaleTransform sf = new ScaleTransform( );
SkewTransform qx = new SkewTransform( );
RotateTransform xz = new RotateTransform( );
TranslateTransform py = new TranslateTransform( );

tfg.Children.Add( sf );
tfg.Children.Add( qx );
tfg.Children.Add( xz );
tfg.Children.Add( py );

ThicknessAnimationUsingKeyFrames animatX=new ThicknessAnimationUsingKeyFrames( );

SplineThicknessKeyFrame sk=new SplineThicknessKeyFrame( new Thickness( setLeft , setTop , 0 , 0 ) , KeyTime.FromTimeSpan( new TimeSpan( 0 , 0 , 0 , 0 , timeSpan ) ) , new KeySpline( 0.37 , 1 , 1 , 1 ) );

animatX.KeyFrames.Add( sk );

Storyboard.SetTarget( animatX , item );
Storyboard.SetTargetProperty( animatX , new PropertyPath( "(FrameworkElement.Margin)" ) );

sb.Children.Add( animatX );
sb.Begin( );
}
#endregion





...全文
评论 10
收藏 已收藏
分享
返回顶部
ylly2508
WPF/Silverlight 8,757 成员 12,031 内容