1

イベント 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」に設定しませんでした。

4

0 に答える 0