0

我正在制作一个类似于绘画的程序,其中包含一个Canvas和几个形状(用户可以绘制的线条、矩形等)。我希望用户能够在Canvas很大程度上使用捏合手势来放大和缩小它(在合理的范围内,比如比默认大小Width=1000 和Height=1000 小/大 5 倍)。

使用ScaleTransform来自控件的ManipulationDelta. 但我希望它Canvas和以前一样大小;意思是如果Canvas占据了整个屏幕然后用户向内捏,Canvas它的内容应该变小,但Canvas仍然必须占据整个屏幕空间(所以一切看起来更小,但现在用户有更多空间来绘制形状)。

为此,我尝试根据缩放的数量增加Width和。HeightCanvas

private void ccDraw_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        CanvasControl ccSender = (CanvasControl)sender;
        CompositeTransform ctSender = ccSender.RenderTransform as CompositeTransform;

        ctSender.ScaleX *= e.Delta.Scale;
        ctSender.ScaleY *= e.Delta.Scale;

        ccDraw.Width *= 1/e.Delta.Scale; // sizing up inverse of amount scaled down
        ccDraw.Height *= 1/e.Delta.Scale;// same here
    }

你会认为这段代码可以解决问题;我正在通过增加比例来抵消较小的比例尺寸,因此最终结果将是相同的 - 但没有缩小,但/Canvas没有明显的增加。但是,我可以在调试输出中看到高度/宽度值已从默认值 5000 更改为 6000.13~。WidthHeight

谁能告诉我我做错了什么?或者如果有更好的方法来做到这一点?请注意,这Canvas并不是真正的内置的,而是CanvasControl来自 Win2D 的,尽管这无关紧要。

4

1 回答 1

1

我认为修改渲染转换并不是真正的正确方法。

相反,我建议您使用GestureRecognizer类来处理您的输入。

保持 CanvasControl 相同的大小,但根据 GestureRecognizer 的事件调整您绘制的内容。绘图会话上的 Transform 属性可能有助于调整您在控件中绘制的项目的比例。

于 2015-09-22T17:22:15.550 回答