8,707
社区成员




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
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;
}