Wpf 我应该用几何学吗?在这里别动?

Wpf 我应该用几何学吗?在这里别动?,wpf,geometry,shapes,Wpf,Geometry,Shapes,当一个WPF项目被冻结时,文档说它不能被更改。我只是不太清楚在这种情况下,变化意味着什么 例如,如果我创建了一个形状的实例,然后将其冻结,那么即使它已冻结,也可以执行旋转或平移等操作吗?简短回答: 对象冻结后,无法修改其上的任何属性。这是递归的 详细回答: 首先,类以及路径、椭圆、矩形等都是不可自由化的 但是假设你说的是可自由化的,那么一般的答案是否定的,因为试图修改冻结对象的属性是不可能的。例如,以下代码将引发异常 var geo = new LineGeometry(); geo.Freez

当一个WPF项目被冻结时,文档说它不能被更改。我只是不太清楚在这种情况下,变化意味着什么

例如,如果我创建了一个形状的实例,然后将其冻结,那么即使它已冻结,也可以执行旋转或平移等操作吗?

简短回答: 对象冻结后,无法修改其上的任何属性。这是递归的

详细回答: 首先,类以及路径、椭圆、矩形等都是不可自由化的

但是假设你说的是可自由化的,那么一般的答案是否定的,因为试图修改冻结对象的属性是不可能的。例如,以下代码将引发异常

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);
简短答复: 对象冻结后,无法修改其上的任何属性。这是递归的

详细回答: 首先,类以及路径、椭圆、矩形等都是不可自由化的

但是假设你说的是可自由化的,那么一般的答案是否定的,因为试图修改冻结对象的属性是不可能的。例如,以下代码将引发异常

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

因此,如果我将变换添加到形状中,即使我冻结几何体,变换也会起作用?是的,形状会相应地发生变换。如果我将变换添加到形状中,即使我冻结几何体,变换也会起作用?是的,形状会相应地发生变换