我有一个形状(下面的红色路径),我必须将此路径应用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有什么区别?在这两种情况下,我如何能获得相同的结果?
谢谢。
最佳答案
区别只是转换的应用顺序。
在第一种情况下(TransformGroup),您首先要按(50,50)进行转换,然后按(2,2)进行缩放。在第二种情况下(PushTransform),您首先缩放,然后翻译。
TransformGroup中的转换以顺序,先进先出的顺序执行,而推送的转换以堆栈状或后进先出的顺序执行。