【问题标题】:Applying multiple transforms to a UI element将多个转换应用于 UI 元素
【发布时间】:2012-07-26 00:45:19
【问题描述】:

我是 WP7/Silverlight/C# 编程的新手,我目前正在整理一个简单的放大应用程序来掌握一些事情。为了提供“放大”和“缩小”功能,我成功​​地在包含视频源的 UIElement 上使用了 ScaleTransform。

随着我进一步开发应用程序,我意识到我想适应应用程序使用过程中的方向变化,并确保视频源做出相应响应(应用程序固定为横向模式,但用户可能想要“转电话结束'出于某种原因)。为了解决这个问题,我创建并应用了一个 RotateTransform 并链接到 OrientationChanged 事件。

所有这些都可以正常工作,但是当我在更改方向后尝试缩放(使用 ScaleTransform)时,视频源会缩放,但会将反馈翻转回“默认”方向,因此会上下颠倒。

鉴于此,我认为我需要在放大时应用这两种变换,所以我创建了一个 TransformGroup 并向其中添加了 ScaleTransform 和 RotateTransform。但是,缩放功能不适用于此功能,并且似乎没有应用任何变换。

有其他人在尝试应用 TransformGroup 时遇到问题吗?

我在下面包含了放大和方向代码的 sn-p 以供参考 - 如果我做的事情很长,请提前道歉,但请记住我仍在学习。

任何帮助将不胜感激。 提前致谢, 克雷格。

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;
            }
        }

【问题讨论】:

    标签: c# silverlight windows-phone-7 xaml


    【解决方案1】:

    您可以使用CompositeTransform 类。这个类结合了你所有使用过的转换,让事情变得更简单。

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 2011-12-13
      • 2013-01-05
      • 1970-01-01
      • 2010-11-09
      • 2013-05-30
      • 2020-07-11
      • 2012-05-16
      • 1970-01-01
      相关资源
      最近更新 更多