In regards to getting the best fit zoom factor unfortunately I didn't expose this via a method or property so there isn't a way of getting it, save what you're already doing.
However, I think we could expand the load handler a touch to avoid having to have zoom changed handler as no doubt there's a bit of jank when the zoom gets set and then reset.
control has a ZoomLevels
property which is a collection of all the incremental values that will be used when zooming in or out. What you could do is find the minimum zoom factor, then remove all values lower than this, and then insert that minimum zoom factor to the start of the list. That should then prevent ImageBox
from automatically zooming beyond this.
Give that a go and let me know if it works, if so perhaps I'll add a FAQ entry or expand the demo.
Although this doesn't sound like quite the same issue, you could also check this issue
on GitHub which has some sample code and may be of interest.