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

You can use the CompositeTransform class. This class combines all your used transformations and makes things easier.

于 2012-07-25T16:45:19.340 回答