1

当 WPF 项目被冻结时,文档说它无法更改。我只是不太确定在这种情况下“变化”是什么意思。

例如,如果我创建一个形状的实例然后冻结它,即使它被冻结,是否可以执行旋转或平移之类的操作?

4

1 回答 1

6

简短的回答:

一旦对象被冻结,您就不能修改它的任何属性。这递归地适用。

更长的答案:

首先,Shape类(以及因此 Path、Ellipse、Rectangle 等)是不可冻结的。

但是假设您谈论的是可冻结的Geometry,那么一般答案是否定的,因为尝试修改冻结对象的属性是不可能的。例如下面的代码会抛出异常

var geo = new LineGeometry();
geo.Freeze();
// InvalidOperationException:
geo.Transform = new TranslateTransform(10, 10);

并且冻结是递归的,所以不可能像这样欺骗系统:

var tx = new TranslateTransform(10, 10);
var geo = new LineGeometry();
geo.Transform = tx;
geo.Freeze();
// InvalidOperationException:
tx.X = 20;

但是,回到你最初关于形状的问题,它是由几何构造的(但不是从它们派生的)。

您可以冻结形状的几何形状,并仍然对该形状应用变换。这是有效的,因为变换是在形状对象上,而不是在可冻结对象上:

var geo = new LineGeometry(new Point(0,0), new Point(10,10));
geo.Freeze();
var myShape = new Path { Data = geo };
// This is fine, even though the geometry is frozen
myShape.RenderTransform = new TranslateTransform(10, 10);
于 2012-11-02T08:25:32.540 回答