0

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 を変更することは可能ですか?

はいの場合、どうすればよいですか?

4

0 に答える 0