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>
このようにすると一か所で拡大縮小と座標反転がおこなえるようになります。
Canvas.RenderTransform> GeometryGroup Geometry変換 RenderTransfer> RotateTransform RotateTransform> ScaleTransform ScaleTransform ScaleY ScaleTransform> TranferGroup TransferGroup TransformGroup> TranslateTransform TranslateTransform> VolumeSlider XAML ネスト 入れ子 座標反転 最上位 自動下書き