イベント ManiuplationDelta の e.CumulativeManipulation.Translation.X を使用して、いくつかの stackPanel を Y 軸を中心に回転させようとしましたが、stackPanel.Projection.rotationY が 90 度近くになると、回転がおかしくなりました。デバッグ後、e.CumulativeManipulation.Translation.X の値が -2000 または 3000 などになることがあることがわかりました。
なぜこのように大きな (間違った) 数値が報告されているのでしょうか。ヘルプはありますか?
コードのスニペットについては、以下を確認してください。
Xaml
<Grid x:Name="ContentPanel" Background="Yellow" Grid.Row="1" Margin="12,0,12,0" >
<StackPanel x:Name="Under" Background="DarkCyan" ManipulationDelta="ContentPanel_ManipulationDelta" >
<TextBlock Text="Under" Foreground="Blue" FontSize="48"/>
<StackPanel.Projection>
<PlaneProjection CenterOfRotationX="0.5" CenterOfRotationY="0.5" RotationY="0"/>
</StackPanel.Projection>
</Grid>
C#
private void ContentPanel_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
;
double FullWidth = (sender as FrameworkElement).ActualWidth;
delta = e.CumulativeManipulation.Translation.X;
if (Math.Abs(delta) > FullWidth)
{
//Something wrong
Debug.WriteLine("Cumulative x: " + e.CumulativeManipulation.Translation.X);
Debug.WriteLine("width: " + (sender as FrameworkElement).ActualWidth);
Debug.WriteLine("");
}
double RotateValue = (delta / FullWidth) * -180;
var Underprojection = (Under.Projection as PlaneProjection);
Underprojection.RotationY = RotateValue;
}
編集: 問題が見つかりました。CenterOfRotationZ を値「0.5」に設定しませんでした。