Я делаю это, устанавливая масштаб для ScaleTransform в обработчике события ScrollViewer Load. По сути, я делю ActualWidth ScrollViewer на ширину источника изображения. У меня также есть обработчик для события ScrollViewer SizeChanged, который пересчитает масштаб, чтобы изображение уменьшалось и увеличивалось, если вы измените размер окна. Вот некоторый основной код.
Примечание: здесь не учитывается вертикальная полоса прокрутки, фактически, поиск того, как справиться с этим, и я здесь оказался. Я обновлю, когда найду ответ на этот вопрос.
private void imageScroller_Loaded(object sender, RoutedEventArgs e)
{
FitToWidth();
}
private void imageScroller_SizeChanged(object sender, SizeChangedEventArgs e)
{
if(imageScroller.IsLoaded)
FitToWidth();
}
private void FitToWidth()
{
scaler.ScaleX = scaler.ScaleY = imageScroller.ActualWidth / imageViewer.Source.Width;
}