我正在制作一个类似绘画的程序,其中包含Canvas
和几个形状(用户可以绘制的线条,矩形等)。我希望用户能够在很大程度上使用捏合手势放大并缩小Canvas
(在合理范围内,比默认大小Width
更小/更大= 1000和Height
= 1000)。
使用控件ScaleTransform
中的ManipulationDelta
非常容易实现。但是我希望Canvas
和以前一样大小;意思是如果Canvas
占用整个屏幕然后用户向内捏,Canvas
及其内容应该变小但Canvas
仍然占用整个屏幕空间(所以一切看起来都很小,但现在用户有更多的空间来绘制形状。)
为此,我尝试根据缩放金额增加Width
的{{1}}和Height
。
Canvas
你认为这段代码可以解决问题;我随着比例的增加偏移了较小的比例尺,所以最终结果是相同的 - 但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
/ {{1没有明显的增加}}。但是,我可以在调试输出中看到Height / Width值已从默认值5000更改为6000.13~。
有谁能告诉我我做错了什么?或者,如果有更好的方法可以做到这一点?请注意,Width
实际上不是内置的Height
,而是来自Win2D的Canvas
,尽管它无关紧要。
答案 0 :(得分:1)
我认为修改渲染变换并不是解决这个问题的正确方法。
相反,我建议您使用GestureRecognizer课程来处理您的输入。
保持CanvasControl的大小相同,但根据GestureRecognizer的事件调整您绘制的内容。绘图会话中的Transform属性可以帮助您调整在控件中绘制的项目的比例。