【发布时间】:2015-09-18 06:25:52
【问题描述】:
我正在制作一个类似于绘画的程序,其中包含Canvas 和几个形状(用户可以绘制的线条、矩形等)。我希望用户能够使用捏合手势在很大程度上放大和缩小这个Canvas(在合理的范围内,比如比Width=1000 和@987654324 的默认大小小/大5倍@=1000)。
使用控件的ManipulationDelta 中的ScaleTransform 很容易做到这一点。但我希望Canvas 与以前一样大小;这意味着如果Canvas 占据了整个屏幕然后用户向内捏,Canvas 和它的内容应该变小,但Canvas 仍然必须占据整个屏幕空间(所以一切看起来更小,但现在有为用户绘制形状提供了更多空间)。
为此,我尝试根据缩放的数量增加Canvas 的Width 和Height。
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 没有缩小,但Width/Height 没有明显增加。但是,我可以在调试输出中看到高度/宽度值已从默认值 5000 更改为 6000.13~。
谁能告诉我我做错了什么?或者如果有更好的方法来做到这一点?请注意,Canvas 并不是真正内置的,而是来自 Win2D 的 CanvasControl,尽管这无关紧要。
【问题讨论】:
-
您确定这不能正常工作吗?我本来预计,如果您将渲染变换放大一定数量,然后将控件缩小相同数量,您最终会在屏幕上得到相同大小的东西。
-
是的,控件的
Width和Height值确实发生了变化,但控件的外观没有明显差异,即我可以注释掉上面代码中的最后两行而没有任何明显的区别.
标签: c# xaml windows-store-apps winrt-xaml win2d