/// <summary> /// 卡片自适应 /// </summary> private void setCardAutoFit() { double perrow = 9; int rows = (int)Math.Ceiling(mcv.Children.Count / perrow); for (int i = 0; i < rows; i++) { for (int j = 0; perrow *i + j < mcv.Children.Count && perrow *i + j < perrow *(i + 1); j++) { //Console.WriteLine(perrow * i + j); CardUI card = mcv.Children[(int)perrow * i + j] as CardUI; if (card != null) { Point start = new Point(Canvas.GetLeft(card), Canvas.GetTop(card)); Point end = new Point(5 * (j + 1) + 56 * j, 5 * (i + 1) + 81 * i); if (start.X != end.X || start.Y != end.Y) { card.Tag = end; MyStoryboard msb = CardAnimation.CanvasXY(start, end, 300); msb.card = card; msb.Completed += (object c, EventArgs d) => { msb.card.BeginAnimation(Canvas.LeftProperty, null); msb.card.BeginAnimation(Canvas.TopProperty, null); Point set = (Point)msb.card.Tag; Canvas.SetLeft(msb.card, set.X); Canvas.SetTop(msb.card, set.Y); }; msb.FillBehavior = System.Windows.Media.Animation.FillBehavior.Stop; msb.Begin(card); } } } } }