Move事件,拖动控件的有关问题,内附代码,请大家帮帮忙吧~
Move事件,拖动控件的问题,内附代码,请大家帮帮忙吧~!
用鼠标拖动容器,然后让容器上的控件按照鼠标走的值去走,用的是故事版,但是拖动快的时候,为什么会串位呢?
------解决方案--------------------
这个问题我也遇到过,我写的拖动控件也是。
用鼠标拖动容器,然后让容器上的控件按照鼠标走的值去走,用的是故事版,但是拖动快的时候,为什么会串位呢?
- C# code
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
------解决方案--------------------
这个问题我也遇到过,我写的拖动控件也是。