如何将画布的x,y坐标原点改为左下角并翻转y坐标?

15

我有一堆数据点,想要双向绑定到画布上的点。

这些点假设y值越大则向上反映,就像大多数数学图形一样。

如何将画布的x、y原点更改为左下角,并颠倒其对y坐标的解释?

(我希望保持在XAML中)


嗨,我知道这已经过时了,但你是否让它双向工作了?我正在尝试通过单击来选择点。 - Khalil Khalaf
4个回答

29
<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
    </Canvas.LayoutTransform>
</Canvas>

3
谢谢您。但是,ScaleX、CentreX和CenterY是否有些多余了呢?只使用ScaleY="-1"就可以解决问题了。另外,请注意这也会使所有文本上下颠倒。 - David Smith
5
是的,其他属性是多余的,但根据我所见的惯例,将这些属性包含进去。如果只是画点,翻转文本是可以的。如果需要绘制文本,可以在位于图形画布上方的第二个透明画布上绘制它。 - kenwarner
@qntmfred,有文本实现的任何示例实现吗?因为积分系统也会影响文本位置。 - RobinAtTech
我需要翻转我的x坐标,这个解决方案完美地解决了问题。 - WBuck

3

我广泛尝试了ScaleTransform方法:它不起作用。它只移动两个坐标中的一个,而从不同时移动两个坐标。然而,以下方法是有效的:

<Canvas Name="myCanvas" Width="0" Height="0" RenderTransform="1 0 0 -1 0 0"
    HorizontalAlignment="Center" VerticalAlignment="Center" >

ScaleTransform 对我来说完美地工作了,它允许我旋转一个或两个轴,并将原点放在我想要的位置。尽管对于我的当前情况不可用,但还是要给你点赞。 - Bent Tranberg

0

如果你使用数据绑定,你可以使用类型转换器,但是这需要跳出XAML并且需要事先知道画布的大小。


嗨,数据绑定是什么意思?我试图通过单击它们来选择点。类型转换器与此有关吗? - Khalil Khalaf

0

我可能会创建一个自定义面板,而不是使用Canvas,并为其添加适合您需求的属性。以下是实现自定义面板的示例:

http://blog.boschin.it/articles/silverlight-radialpanel.aspx

像Canvas这样的东西非常简单,因为你不需要在测量和排列覆盖上做太多工作。

你也可以从Canvas继承并重写ArrangeOverride,我没有尝试过,但可能会起作用。


我不认为你可以用一个普通的画布来完成这个任务,如果你在Y轴上缩放-1,所有的东西都会翻转。我想你也可以将所有元素都缩放-1。 - Bill Reiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接