我正在制作一个类似于绘画的程序,其中包含一个Canvas
和几个形状(用户可以绘制的线条、矩形等)。我希望用户能够在Canvas
很大程度上使用捏合手势来放大和缩小它(在合理的范围内,比如比默认大小Width
=1000 和Height
=1000 小/大 5 倍)。
使用ScaleTransform
来自控件的ManipulationDelta
. 但我希望它Canvas
和以前一样大小;意思是如果Canvas
占据了整个屏幕然后用户向内捏,Canvas
它的内容应该变小,但Canvas
仍然必须占据整个屏幕空间(所以一切看起来更小,但现在用户有更多空间来绘制形状)。
为此,我尝试根据缩放的数量增加Width
和。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
没有明显的增加。但是,我可以在调试输出中看到高度/宽度值已从默认值 5000 更改为 6000.13~。Width
Height
谁能告诉我我做错了什么?或者如果有更好的方法来做到这一点?请注意,这Canvas
并不是真正的内置的,而是CanvasControl
来自 Win2D 的,尽管这无关紧要。