你可以使用对Canvas面板里面的子元素使用LayoutTransform 对其进行灵活的变换。在这里问讨论除了TranslateTransform 以外的几种变换RotateTransform,ScaleTransform 和SkewTransform。
<Canvas>
<Button Content="Hopalong Cassidy" Canvas.Left="10" Canvas.Top="10">
<Button.LayoutTransform>
<RotateTransform Angle="45"/>
</Button.LayoutTransform>
</Button>
<Button Content="Roy Rogers" Canvas.Right="10" Canvas.Top="10">
<Button.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleX="2.0"/>
<RotateTransform Angle="-45"/>
</TransformGroup>
</Button.LayoutTransform>
</Button>
<Button Content="Spade Cooley" Canvas.Left="10" Canvas.Bottom="10">
<Button.LayoutTransform>
<SkewTransform AngleX="20"/>
</Button.LayoutTransform>
</Button>
</Canvas>

原文地址: https://wpf.2000things.com/2012/01/24/479-using-a-layout-transform-on-child-elements-in-a-canvas/
**********************************************************译者注***********************************************************
与 RenderTransform 不同,LayoutTransform 会影响布局的结果。
设置LayoutTransform 转换方式可以提供强大的缩放和旋转功能。但是,LayoutTransform 会忽略 TranslateTransform 操作。这是因为 FrameworkElement 的子元素的布局系统会将已经进行的变换(已缩放或已旋转)元素的位置偏移量自动纠正到父元素的布局系统和坐标系中。,从而忽略掉TranslateTransform 变换。
如果在不需要布局系统更新布局的时候使用LayoutTransform ,在执行性能上来说并不好。因为将 LayoutTransform 应用于 Panel 的 Children 集合后,它将触发一次新的布局系统处理过程,并强制重新度量和重新排列屏幕上的所有对象,这个时候建议使用RenderTransform。但是如果要更新UI,使用LayoutTransform 是正确的选择。