RenderTransform vs PushTransform

时间:2012-05-04 17:00:00

标签: .net wpf rendering transformation

我有一个形状(下面的红色路径),我必须在此路径中应用TranslateTransformScaleTransform转换。但是,如果我以这种方式使用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;

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

enter image description here

相反,如果我以这种方式使用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);
}

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

enter image description here

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

1 个答案:

答案 0 :(得分:9)

区别仅在于应用转换的顺序。

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

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