WPF中最轻量级的布局容器,原因是其不包含复杂的布局逻辑。
通过Cavas.Left、Canvas.Top、Canvas.Right、Canvas.Bottom来进行子元素坐标位置的设定,Canvas.ZIndex设置子元素重叠层级。
通过ClipToBounds属性设置来确定是否裁剪超出Canvas边界的元素内容。
基本使用Demo
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Canvas Grid.Row="0" Margin="20" Background="AliceBlue">
<Rectangle Width="200" Height="100" Canvas.Left="10" Canvas.Top="30" Fill="AntiqueWhite" Canvas.ZIndex="2"/>
<Button Width="200" Height="100" Canvas.Left="20" Canvas.Top="40" Background="Green" Opacity="0.2" Canvas.ZIndex="1"/> <!--Canvas.ZIndex设置重叠层级-->
<Ellipse Width="50" Height="80" Fill="Blue" Canvas.Right="-20" Canvas.Bottom="-5"/>
</Canvas>
<Canvas Grid.Row="1" Margin="20" Background="AliceBlue" ClipToBounds="True">
<!--ClipToBounds确定是否裁剪超出Canvas边界的元素内容-->
<Rectangle Width="200" Height="100" Canvas.Left="10" Canvas.Top="30" Fill="AntiqueWhite"/>
<Ellipse Width="50" Height="80" Fill="Blue" Canvas.Right="-20" Canvas.Bottom="-5"/>
</Canvas>
</Grid>
InkCanvas
它不是Canvas的派生类,能接收手写笔输入,可绘制线条,能实现批注、画图等功能,十分强大。
有很多编辑模式,如Ink、Select、EraseByStroke等等。能实现子元素选中、鼠标或手写笔绘制线条标注、已绘制线条的擦除等功能。
目前开发中还没用到过,特定业务场景下使用,有需要的时候再研究。