如何改变画布原点的位置

时间:2012-01-08 09:06:48

标签: silverlight canvas coordinates

我正在开发一个允许用户绘制内容并将其保存在数据库中的项目。

基本上,用户在画布上绘图,画布比屏幕大小大5倍,画布仍然在屏幕的中心(或者屏幕位于画布的中心)。

为了使画布大小灵活(我们希望将来更改画布的大小),我们希望将画布的中心设置为原点,即(0,0)位于画布的中心。所以当鼠标点击某处时,我得到的点是根据画布的中心来测量的。

也许你会说:

  1. Canvas.RenderTransformOrigin = (.5,.5)。但我不是要求轮换中心,所以这不是解决方案。
  2. Canvas.RenderTransform = TranslateTransform (Canvas.Width/2.0, Canvas.Height/2.0)。但这只是将画布上的所有对象移动到中心。
  3. 你也可以这么说,为什么我们不只是用偏移Canvas.Width/2.0, Canvas.Height/2.0翻译MouseClick点,然后在渲染时将它们翻译回来。我们可以做到这一点,但需要付出太多努力,因为我们还有许多其他操作要实现,所以每次我们都要来回翻译。

1 个答案:

答案 0 :(得分:0)

看起来你几乎想到了解决这个问题的所有方法,但是,我会看看我是否还可以添加一个!

Canvas属性,LeftTop,它们决定元素位置是附加属性。您可以创建自己的附加属性OffsetLeftOffsetTop,这些属性允许您根据所需的来源定位元素。这些实现起来很简单,当它们被get / set时,只需处理它们的change事件以设置相应的Canvas附加属性。