【问题标题】:How to change x,y origin of canvas to bottom left and flip the y coordinates?如何将画布的 x,y 原点更改为左下角并翻转 y 坐标?
【发布时间】:2010-11-14 05:32:23
【问题描述】:

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

这些点假定较大的 y 值反映在向上的方向,就像大多数数学图一样。

如何将画布的 x,y 原点更改为左下角并反转它对 y 坐标的解释?

(我想留在 XAML)

【问题讨论】:

  • 嗨,我知道这是旧的,但你有没有让它双向工作?我正在尝试通过单击来选择点

标签: wpf silverlight xaml graphics drawing


【解决方案1】:
<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
    </Canvas.LayoutTransform>
</Canvas>

【讨论】:

  • 感谢您,但 ScaleX、CentreX 和 CenterY 不是多余的吗?仅使用 ScaleY="-1" 似乎就可以解决问题。此外,其他人请注意,这也会将任何文本颠倒过来。
  • 是的,其他属性是多余的,但包含这些属性是惯例(据我所知)。是的,它会翻转文本,但如果你只是画点应该没问题。如果您需要绘制文本,您可以在图形 Canvas 顶部的第二个透明 Canvas 上绘制它
  • @qntmfred,文本实现的任何示例实现。因为点系统也会影响文本的位置
  • 我需要翻转我的 x 坐标,这个解决方案效果很好。
【解决方案2】:

我广泛尝试了 ScaleTransform 方法:它不起作用。它只移动 2 个坐标之一,从不移动两者。然而,这就像宣传的那样工作:

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

【讨论】:

  • ScaleTransform 非常适合我,让我可以转动一个或两个轴,以及将 origo 放置在我想要的位置。尽管如此,+1 指出这一点,虽然不适用于我目前的情况。
【解决方案3】:

如果您使用数据绑定,您可以使用TypeConvertor,但为此您必须在 XAML 之外,并且您需要事先知道画布的大小。

【讨论】:

  • 您好,数据绑定是什么意思?我正在尝试通过单击它们来选择点。 TypeConverter跟这个有什么关系?
【解决方案4】:

我可能会创建一个自定义面板而不是使用 Canvas,并为其提供对您的需求有意义的附加属性。下面是一个实现自定义面板的示例:

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

像 Canvas 这样的东西非常简单,因为您不必在度量中做太多事情并安排覆盖。

您也可以从 Canvas 继承并覆盖 ArrangeOverride,我没有尝试过,但它可能有效。

【讨论】:

  • 嗯,我不明白你怎么能用一个直的画布做到这一点,如果你在 Y 轴上缩放它-1,一切都会被翻转。我想你也可以缩放所有元素 -1。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2016-10-29
  • 2015-04-18
  • 1970-01-01
相关资源
最近更新 更多