При увеличении масштаба рисунка на холсте у меня есть требование показать полосы прокрутки.
Холст находится в ScrollViewer, и я увеличиваю ширину / высоту холста, чтобы появлялись полосы прокрутки (в противном случае они не отображаются).
Чтобы увеличить масштаб в 1,1 раза, я использую этот код:
Matrix m = this.LayoutTransform.Value;
if (e.Delta > 0) f = 1.1;
else f = 1.0 / 1.1;
m.Scale(f, f);
this.LayoutTransform = new MatrixTransform(m);
this.Height = this.ActualHeight * f;
this.Width = this.ActualWidth * f;
Оказывается, холст становится слишком большим. Рисунок увеличивается на 10%, но ширина кажется на 20% больше, чем квадрат 1,1. Поэтому я использую Math.Sqrt(f);
вместо f
.
Кто-нибудь может объяснить, почему он так себя ведет?