【问题标题】:How to Change the Position of a Canvas'es Origin Point如何更改画布原点的位置
【发布时间】:2014-08-18 04:02:44
【问题描述】:

我正在做一个允许用户绘制东西并将其保存在数据库中的项目。

基本上,用户在画布上绘制,画布比屏幕尺寸大 5 倍,而画布仍然在屏幕的中心(或者屏幕在画布的中心)。

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

也许你会说:

  1. Canvas.RenderTransformOrigin = (.5,.5)。但我不是问旋转中心,所以这不是解决方案。
  2. Canvas.RenderTransform = TranslateTransform (Canvas.Width/2.0, Canvas.Height/2.0)。但这只是将画布上的所有对象移动到中心。

您也可能会说,我们为什么不直接平移偏移量为Canvas.Width/2.0, Canvas.Height/2.0 的MouseClick 点,然后在渲染时将它们平移回来。我们可以这样做,但是太费力了,因为我们还有很多其他的操作要实现,所以每次都要来回翻译。

【问题讨论】:

    标签: silverlight canvas coordinates


    【解决方案1】:

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

    指示元素位置的Canvas 属性LeftTop 是附加属性。您可以创建自己的附加属性,OffsetLeftOffsetTop,它们允许您根据所需的原点定位元素。这些实现起来很简单,当它们被获取/设置时,只需处理它们的更改事件以设置各自的Canvas 附加属性。

    【讨论】:

    • 您好 ColinE,感谢您的回复。我还想到了与您建议的类似方法,即创建另一个画布public PeterCanvas : Canvas,然后添加一些新属性,例如OffsetLeftOffsetTop(作为您的)。但是鼠标点击事件的坐标仍然是基于左上角测量的(也许解决方法是e.GetPosition(HelpCanvas),其中HelpCanvas 是位于原始画布中心的 0 尺寸画布)。而且,还有很多工作要做,比如:RenderTransform 行为(画布上的对象可以有这个属性)...
    • @PeterLee 我知道您正在寻找一个简单的选择 - 但恐怕没有一个!
    猜你喜欢
    • 2020-06-09
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多