На самом деле проблема заключается в расчете скорости масштабирования выбранной области. Мы должны подогнать выбранную область под размер окна. Для этого мы постоянно увеличиваем выбранную часть на один процент и каждый раз проверяем размер окна. Если размер окна больше, то мы прекращаем увеличивать выделенную область.
логика как
double rate=0;
while (true)
{
if (selectImageHeight * (st.ScaleY + rate) < this.ActualHeight && selectImageWidth * (st.ScaleX + rate) < this.ActualWidth)
rate += 0.01;
else
break;
}
Zoom(rate);
Здесь o.o1 означает один процент, это означает окно. Глубокое масштабирование возможно при использовании кода и значений ScrollToHorizontOffset и ScrollToVerticalOffset прокрутки.