3

wpfにカスタム六角形メニューがあり、それを回転させたいのですが、これは回転コードです

 hexagonMenu1.RenderTransform = new RotateTransform(i,hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);

このコードを複数回呼び出すと、何も実行されず、パネルが回転しません。どうすればよいですか?ありがとう。

4

2 に答える 2

3

i新しいRenderTransformごとに、回転角、つまりパラメータを増やす必要があります。

既存のRenderTransformを再利用して、Angleプロパティを増やすこともできます。

hexagonMenu1.RenderTransform = new RotateTransform(0, hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);
...
double deltaRotation = ...
// do the following for every rotation cycle
((RotateTransform)hexagonMenu1.RenderTransform).Angle += deltaRotation;

また、回転角をアニメーション化することを検討して、回転角の増加をループする必要をなくすこともできます。

DoubleAnimation animation =
    new DoubleAnimation(360, TimeSpan.FromSeconds(10));

((RotateTransform)hexagonMenu1.RenderTransform).BeginAnimation(
    RotateTransform.AngleProperty, animation);
于 2012-08-21T07:37:39.503 に答える
1

あなたが書いたコードは「六角形を回転させる」ものではないことを理解する必要があります。それは「ヘガクソンの回転を設定する」ことです。

コードが実行していると思うのは、「30度回転します。さらに30度回転します。今度は60度回転します。」です。

実際には、コードは次のように実行しています。「回転を30度に設定します。回転を30度に設定します。回転は30度に設定します。」

コードを何度呼び出しても、それ以上ローテーションされることはありません。回転を設定する前にiの値が異なるように、コードを変更する必要があります。

于 2012-08-21T07:56:19.397 に答える