我正在研究一个项目,该项目允许用户绘制某些内容并将其保存在数据库中。如何更改画布原点的位置
基本上,用户在画布上绘画,画布比画布大小大5倍,画布仍然在画面中央(或者画布在画布中央)。
为了使其对于画布大小更灵活(我们希望将来改变画布的大小),我们希望将画布的中心设置为原点,即(0,0 )位于画布的中心。所以当鼠标点击某个地方时,我得到的观点是基于画布中心来衡量的。
也许你会说:
Canvas.RenderTransformOrigin = (.5,.5)
。但我不问旋转中心,所以这不是解决方案。Canvas.RenderTransform = TranslateTransform (Canvas.Width/2.0, Canvas.Height/2.0)
。但这只是将画布上的所有对象移动到中心。
您也可以这么说,为什么我们不只是将鼠标点的点数翻译为Canvas.Width/2.0, Canvas.Height/2.0
,然后在渲染时将它们翻译回来。我们可以做到这一点,但是付出的努力太多了,因为我们还有很多其他操作需要实施,所以每次我们都必须来回翻译。
嗨科林,谢谢你的回复。我也想到了一种类似的方法,即创建另一个画布'public PeterCanvas:Canvas',然后添加一些新的属性,例如'OffsetLeft','OffsetTop'(与您的一样)。但鼠标点击事件的坐标仍然是基于TopLeft边角来测量的(也许一个解决方法是'e.GetPosition(HelpCanvas)',其中'HelpCanvas'是一个0尺寸的画布,位于原始画布的中心) 。还有,还有很多工作要做,比如:RenderTransform行为(画布上的对象可以使用这个属性)... – 2012-01-08 22:54:51
@PeterLee我知道你正在寻找一个简单的选项 - 但是没有一个我'我害怕! – ColinE 2012-01-09 06:21:12