0

Image新しい場所に移動しようとしている 1x1 グリッドにWPFがあります。私は次のコードを使用しています:

public void AnimateImage(int seatNum, int cardNum)
{
   // This method animates dealing a cardback image to the specified seat.
   //
   Point[][,] Margins;
   Margins = CardMargins; // CardMargins contains the positions to where the cards should end up after being moved.
   Image CardbackImage1 = CardbackImages[seatNum, cardNum];
   // Specify the starting position of the image.
   CardbackImage1.Margin = new Thickness(DealerStartX, DealerStartY, 0, 0);
   CardsGrid.Children.Insert(seatNum, CardbackImage1);
   // Note that if instead of specifying the starting point, the to-point is specified instead,
   // and a return inserted at this point - it displays the card in the correct location.
   TranslateTransform trans = new TranslateTransform();
   CardbackImage1.RenderTransform = trans;
   double ToPosX = Margins[NumSeats][seatNum, cardNum].X;
   double ToPosY = Margins[NumSeats][seatNum, cardNum].Y;
   // DoubleAnimation CardsAnimX = new DoubleAnimation(DealerStartX, 65, TimeSpan.FromSeconds(DealAnimateTime));
   DoubleAnimation CardsAnimX = new DoubleAnimation(DealerStartX, ToPosX, TimeSpan.FromSeconds(DealAnimateTime));
   // DoubleAnimation CardsAnimY = new DoubleAnimation(DealerStartY, DealerStartY - 50, TimeSpan.FromSeconds(DealAnimateTime));
   DoubleAnimation CardsAnimY = new DoubleAnimation(DealerStartY, ToPosY, TimeSpan.FromSeconds(DealAnimateTime));
   trans.BeginAnimation(TranslateTransform.XProperty, CardsAnimX);
   trans.BeginAnimation(TranslateTransform.YProperty, CardsAnimY);
}

CardMargins配列は、カードの最終的な位置を保持するために使用されます。カードは動きますが、問題は、カードが適切な場所に配置されていないことです。配列内の値とCardMargins配列のインデックスが正しいことを確認しました。TranslateTransformメソッドが別のタイプの座標を使用しているか、別の座標系を使用していると思われます。

margin をアニメーション プロパティとして使用できますか? もしそうなら、それを使用するために任意のタイプの変換を使用する必要がありTranslateTransformますか? マージンを使用せずに画像をアニメーション化するより良い方法はありますか?

4

1 に答える 1

1

Marginを使用してプロパティ自体をアニメーション化する方が簡単かもしれませんThicknessAnimation

例:

ThicknessAnimation CardAni = new ThicknessAnimation(StartMargin, EndMargin, TimeSpan.FromSeconds(DealAnimateTime));
CardbackImage1.BeginAnimation(Image.MarginProperty, CardAni);
于 2013-05-29T01:12:31.373 に答える