0

私は WP7/Silverlight/C# プログラミングが初めてで、現在、いくつかのことを理解するために単純な拡大アプリをまとめています。「ズームイン」および「ズームアウト」機能を提供するために、ビデオ フィードを含む UIElement で ScaleTransform を使用することに成功しました。

アプリをさらに開発するにつれて、アプリの使用中に変化する向きに対応し、それに応じてビデオ フィードが応答するようにしたいことに気付きました (アプリは横向きモードに固定されていますが、ユーザーは「電話を裏返したい」と思うかもしれません)。 ' 何らかの理由で)。これに対処するために、RotateTransform を作成して適用し、OrientationChanged イベントにリンクしました。

これはすべて正常に機能しますが、向きを変更した後に (ScaleTransform を使用して) ズームしようとすると、ビデオ フィードはズームしますが、フィードを「デフォルト」の向きに戻すため、逆さまに表示されます。

これを踏まえて、拡大するときに両方の変換を適用する必要があると考えたので、TransformGroup を作成し、それに ScaleTransform と RotateTransform を追加しました。ただし、ズーム機能はこれでは機能せず、変換のいずれも適用されていないようです。

TransformGroup を適用しようとしたときに問題が発生した人はいますか?

参照用にズームインとオリエンテーション コードのスニペットを以下に含めました。

どんな助けでも大歓迎です。前もって感謝します、クレイグ。

UIElement videocontainer;
RotateTransform rotatetransform = new RotateTransform();

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
        {
            switch (Orientation)
            {
                case PageOrientation.LandscapeLeft:
                    rotatetransform.Angle = 0;
                    break;
                default:
                    rotatetransform.Angle = 180;
                    break;
            }
            rotatetransform.CenterX = 320;
            rotatetransform.CenterY = 240;
            videocontainer.RenderTransform = rotatetransform;

private void ZoomIn_Click(object sender, EventArgs e)
        {
            if (zoom < 7)
            {
                switch (Orientation)
                {
                    case PageOrientation.LandscapeLeft:
                        ScaleTransform myscaletransform1 = new ScaleTransform();
                        myscaletransform1.ScaleX = myscaletransform1.ScaleX * 1.25;
                        myscaletransform1.ScaleY = myscaletransform1.ScaleY * 1.25;
                        myscaletransform1.CenterX = 320;
                        myscaletransform1.CenterY = 240;
                        TransformGroup zoomintranformgroup1 = new TransformGroup();
                        zoomintranformgroup1.Children.Add(myscaletransform1);
                        zoomintranformgroup1.Children.Add(rotatetransform);
                        videocontainer.RenderTransform = zoomintransformgroup1;
                        zoom++;
                        break;
                    default:
                        ScaleTransform myscaletransform2 = new ScaleTransform();
                        myscaletransform2.ScaleX = myscaletransform2.ScaleX * 1.25;
                        myscaletransform2.ScaleY = myscaletransform2.ScaleY * 1.25;
                        myscaletransform2.CenterX = 320;
                        myscaletransform2.CenterY = 240;
                        TransformGroup zoomintranformgroup2 = new TransformGroup();
                        zoomintranformgroup2.Children.Add(myscaletransform2);
                        zoomintranformgroup2.Children.Add(rotatetransform);
                        videocontainer.RenderTransform = zoomintransformgroup2;
                        zoom++;
                        break;
                }


            }
            else
            {
                return;
            }
        }
4

1 に答える 1

1

CompositeTransformクラスを使用できます。このクラスは、使用したすべての変換を組み合わせて、作業を簡単にします。

于 2012-07-25T16:45:19.340 に答える