Я делаю рисовальную программу с помощью Canvas
и нескольких фигур (линий, прямоугольников и т. Д., Которые пользователь может рисовать) внутри. Я хочу, чтобы пользователь мог увеличить этот масштаб и уменьшить его с помощью жестких жестов (в разумных пределах, например, в 5 раз меньше/больше от размера по умолчанию Width
= 1000 и Height
= 1000).Термоусадочный холст, но сохраняйте «видимые» пропорции экрана
Это довольно легко выполнимо с помощью ScaleTransform
от элемента управления. Но я хочу, чтобы 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
уменьшает, но нет видимого увеличения в Width
/Height
. Тем не менее, я мог видеть на выходе отладки, что значение Height/Width было изменено с значения по умолчанию от 5000 до 6000.13 ~.
Может ли кто-нибудь сказать мне, что я делаю неправильно? Или если есть лучший способ сделать это? Обратите внимание, что Canvas
на самом деле не встроенный, но CanvasControl
от Win2D, хотя это не должно иметь значения.
Вы уверены, что это не работает правильно? Я бы предположил, что если вы измените масштаб рендеринга на какую-то сумму, а затем уменьшите контроль до такой же суммы, вы получите то же, что и на экране. – Damyan
Да значения управления 'Width' и' Height' меняются, но не имеют явной разницы в том, как выглядит элемент управления. Я могу прокомментировать последние две строки в приведенном выше коде без какой-либо видимой разницы. –