1

WPF アイテムがフリーズすると、変更できないとドキュメントに記載されています。この文脈での「変更」が何を意味するのかよくわかりません。

たとえば、シェイプのインスタンスを作成してフリーズした場合、フリーズした状態でも回転や移動などを行うことはできますか?

4

1 に答える 1

6

短い答え:

オブジェクトがフリーズされると、そのオブジェクトのプロパティを変更することはできません。これは再帰的に適用されます。

長い答え:

まず第一に、Shapeクラス(したがって、Path、Ellipse、Rectangleなど)はフリーズできません。

ただし、フリーズ可能なジオメトリについて話しているとすると、フリーズされたオブジェクトのプロパティを変更しようとすることはできないため、一般的な答えはノーです。たとえば、次のコードは例外をスローします

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 に答える