RenderTransform を使用して要素のズームとオフセットを設定したいと考えています。
これを行うには、次のコードが機能します。
public static void SetMatrixTransform(this UIElement elem, double zoom, double offsetX, double offsetY)
{
elem.RenderTransform = new MatrixTransform
{
Matrix = new Matrix(zoom, 0, 0, zoom, offsetX, offsetY)
};
}
しかし、値を設定するだけでよいので、MatrixTransform を毎回再作成することを避けて、パフォーマンスを改善したいと考えています。
だから私は次のコードを出しました:
public static void SetSmartMatrixTransform(this UIElement elem, double zoom, double offsetX, double offsetY)
{
if (elem == null)
return;
if (!(elem.RenderTransform is MatrixTransform))
{
elem.RenderTransform = new MatrixTransform
{
Matrix = new Matrix(zoom, 0, 0, zoom, offsetX, offsetY)
};
}
else
{
((MatrixTransform)elem.RenderTransform).Matrix = new Matrix(zoom, 0, 0, zoom, offsetX, offsetY);
}
}
残念ながら、else
ブランチをヒットしても、Matrix プロパティは更新されません! つまり、elem.RenderTransform は、メソッドの開始時と同じ値を保持します。
MatrixTransform を毎回再作成せずに、Matrix を変更することは可能ですか?
はいの場合、どうすればよいですか?