wpfにカスタム六角形メニューがあり、それを回転させたいのですが、これは回転コードです
hexagonMenu1.RenderTransform = new RotateTransform(i,hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);
このコードを複数回呼び出すと、何も実行されず、パネルが回転しません。どうすればよいですか?ありがとう。
wpfにカスタム六角形メニューがあり、それを回転させたいのですが、これは回転コードです
hexagonMenu1.RenderTransform = new RotateTransform(i,hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);
このコードを複数回呼び出すと、何も実行されず、パネルが回転しません。どうすればよいですか?ありがとう。
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);
あなたが書いたコードは「六角形を回転させる」ものではないことを理解する必要があります。それは「ヘガクソンの回転を設定する」ことです。
コードが実行していると思うのは、「30度回転します。さらに30度回転します。今度は60度回転します。」です。
実際には、コードは次のように実行しています。「回転を30度に設定します。回転を30度に設定します。回転は30度に設定します。」
コードを何度呼び出しても、それ以上ローテーションされることはありません。回転を設定する前にi
の値が異なるように、コードを変更する必要があります。