Wpf 更改控制画布中的零点
在画布中绘制项目时,位置是从画布中项目的顶部开始:Wpf 更改控制画布中的零点,wpf,xaml,canvas,Wpf,Xaml,Canvas,在画布中绘制项目时,位置是从画布中项目的顶部开始: <Canvas Name="cnvMain" Width="80" Height="80"> <Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray" /> </Canvas> 现在我
<Canvas Name="cnvMain"
Width="80"
Height="80">
<Ellipse Canvas.Top="20"
Canvas.Left="40"
Width="40"
Height="40"
Fill="Gray" />
</Canvas>
现在我需要的是从元素的底部进行测量,如下所示:
最后,我希望能够设置从椭圆底部到画布顶部的距离。
注:椭圆有时不能是圆,翻转它不是一个选项。此外,我不知道运行前的高度,因此在xaml中设置负边距也不起作用。
(图片和示例xaml取自:)如果要指定椭圆底部到画布底部的距离,可以将
Canvas.Top
替换为Canvas.bottom
:
<Ellipse Canvas.Bottom="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"/>
对于从椭圆底部到画布顶部的距离,可以指定负边距:
<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"
Margin="0,-40,0,0"/>
或适当的渲染转换:
<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray">
<Ellipse.RenderTransform>
<ScaleTransform ScaleY="-1"/>
</Ellipse.RenderTransform>
</Ellipse>
为了反转整个画布坐标系的y方向,可以对画布应用渲染变换:
<Canvas ... RenderTransformOrigin="0,0.5">
<Canvas.RenderTransform>
<ScaleTransform ScaleY="-1"/>
</Canvas.RenderTransform>
...
</Canvas>
...
编辑:您还可以将椭圆放置在另一个高度为零的画布中,并将其附着到画布下边框:
<Canvas Canvas.Top="20" Canvas.Left="40" Width="0" Height="0">
<Ellipse Canvas.Bottom="0" Width="40" Height="40" Fill="Gray"/>
</Canvas>
我喜欢RenderTransform解决方案,因为我并不总是知道椭圆的高度,所以我无法用xaml设置边距。RenderTransform现在唯一的问题是它将整个椭圆翻转过来。有没有办法在不翻动的情况下做这件事?