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