canvas 中的更改控件零点

Change controls zero point in canvas

当我在 canvas 中绘制项目时,位置是从 canvas 中项目的顶部开始:

<Canvas Name="cnvMain"
        Width="80"
        Height="80">
  <Ellipse Canvas.Top="20"
           Canvas.Left="40"
           Width="40"
           Height="40"
           Fill="Gray" />
</Canvas>

现在我需要的是从元素底部进行测量,如下所示:

最后我希望能够设置从椭圆底部到 Canvas 顶部的距离。 注意:椭圆有时不能是圆,不能将其倒置。我也不知道运行前的高度,所以在 xaml 中设置负边距也不起作用。

(图片和例子xaml取自:http://weblogs.asp.net/psheriff/centering-text-within-a-wpf-shape-using-a-canvas

如果要指定椭圆底部到 Canvas 底部的距离,可以将 Canvas.Top 替换为 Canvas.Bottom:

<Ellipse Canvas.Bottom="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"/>

对于椭圆底部到Canvas顶部的距离,您可以指定负边距:

<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"
         Margin="0,-40,0,0"/>

或适当的 RenderTransform:

<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray">
    <Ellipse.RenderTransform>
        <ScaleTransform ScaleY="-1"/>
    </Ellipse.RenderTransform>
</Ellipse>

为了反转整个 Canvas 坐标系的 y 方向,您可以将 RenderTransform 应用于 Canvas:

<Canvas ... RenderTransformOrigin="0,0.5">
    <Canvas.RenderTransform>
        <ScaleTransform ScaleY="-1"/>
    </Canvas.RenderTransform>
    ...
</Canvas>

编辑:您也可以将椭圆放在另一个高度为零的 Canvas 中,并将其附加到下 Canvas 边框:

<Canvas Canvas.Top="20" Canvas.Left="40" Width="0" Height="0">
    <Ellipse Canvas.Bottom="0" Width="40" Height="40" Fill="Gray"/>
</Canvas>