img.HorizontalAlignment = HorizontalAlignment.Left;
img.VerticalAlignment = VerticalAlignment.Top;
img.Stretch = Stretch.None;
StackPanel растянется, чтобы заполнить / переполнить любой контейнер, в котором он находится, если не указан его размер. Поскольку вы не устанавливаете поля или выравнивания для чего-либо, поведение по умолчанию для всего равно Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
или просто помещается «Растянуть для заполнения». Выравнивание / расположение ваших элементов решит эту проблему.
РЕДАКТИРОВАТЬ: Добавлено img.Stretch = Stretch.None;
, также я создал пример приложения и проверил его ... он работает.