缩小画布但保持“可见”屏幕比例

时间:2015-09-18 06:25:53

标签: c# xaml windows-store-apps winrt-xaml win2d

我正在制作一个类似绘画的程序,其中包含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,尽管它无关紧要。

1 个答案:

答案 0 :(得分:1)

我认为修改渲染变换并不是解决这个问题的正确方法。

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

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