XAML

XAMLで変換の入れ子(ネスト)はできるの?

WPFにおける開発でGeometry変換に対する入れ子(ネスト)はGeometryGroupを入れ子にすることで可能なことは知っていました。

GeometryGroup
┗ GeometryGroup
┃  ┗ Geometry
┃  ┗ TranferGroup
┃      ┣ TranslateTransform
┃      ┣ ScaleTransform
┃      ┗ RotateTransform
┗ GeometryGroup
    ┗ TranferGroup
        ┣ TranslateTransform
        ┣ ScaleTransform
        ┗ RotateTransform

(それぞれChildrenやTranferに加えています)

最上位のGeometryGroupでは全ての変換が行われた結果がみることができます。

では同じことをXAMLで表現するにはどうしたらいいのでしょう?

XAMLでは<RenderTransfer>を利用し、各変換を同時に行うには<TranslateTransform><ScaleTransform><RotateTransform>を利用します。
例えばCanvas内で変換するには

<Canvas.RenderTransform>
    <TransformGroup>
        <ScaleTransform />
    </TransformGroup>
</Canvas.RenderTransform>

となります。

変換を入れ子にするにはTransferGroupを重ねればいいので

<Canvas.RenderTransform>
    <TransformGroup>
        <TransformGroup>
            <ScaleTransform /> <!-- VolumeSliderなどに連動 --/>
        </TransformGroup>
        <TransformGroup>
            <ScaleTransform ScaleY="-1"/> <!-- -->
        </TransformGroup>
    </TransformGroup>
</Canvas.RenderTransform>

このようにすると一か所で拡大縮小と座標反転がおこなえるようになります。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!