4

我有一个形状(下面的红色路径),我必须在这个路径上应用一个TranslateTransform和一个ScaleTransform转换。但是如果我以这种方式使用Shape RenderTransform属性:

Path MyPath = new Path { Fill = new SolidColorBrush(Colors.Red) };
MyPath.Data = MyPathGeometry;
TransformGroup transf = new TransformGroup();
transf.Children.Add(new TranslateTransform(50, 50));
transf.Children.Add(new ScaleTransform(2, 2));
MyPath.RenderTransform = transf;

我得到了这种类型的图纸:

在此处输入图像描述

相反,如果我以这种方式使用DrawingContext PushTransform方法:

DrawingVisual MyPath = new DrawingVisual();

using (DrawingContext context = MyPath.RenderOpen()) {
   context.PushTransform(new TranslateTransform(50, 50));
   context.PushTransform(new ScaleTransform(2, 2));
   context.DrawGeometry(Brushes.Red, null, MyPathGeometry);
}

我得到了这种类型的图纸:

在此处输入图像描述

为什么两条路径以不同的方式放置?使用 PushTransform 和 RenderTransform 有什么区别?我怎么能在这两种情况下得到相同的结果?谢谢。

4

1 回答 1

9

区别只是应用转换的顺序。

在第一种情况下 (TransformGroup),您首先平移 (50, 50),然后按 (2, 2) 缩放。在第二种情况下(PushTransform),您首先缩放,然后平移。

TransformGroup 中的转换按顺序、先进先出的顺序执行,而推送的转换按堆栈式或后进先出的顺序执行。

于 2012-05-04T18:34:59.580 回答