我正在开发一个允许用户绘制内容并将其保存在数据库中的项目。
基本上,用户在画布上绘图,画布比屏幕大小大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
翻译MouseClick点,然后在渲染时将它们翻译回来。我们可以做到这一点,但需要付出太多努力,因为我们还有许多其他操作要实现,所以每次我们都要来回翻译。
答案 0 :(得分:0)
看起来你几乎想到了解决这个问题的所有方法,但是,我会看看我是否还可以添加一个!
Canvas
属性,Left
和Top
,它们决定元素位置是附加属性。您可以创建自己的附加属性OffsetLeft
,OffsetTop
,这些属性允许您根据所需的来源定位元素。这些实现起来很简单,当它们被get / set时,只需处理它们的change事件以设置相应的Canvas
附加属性。