I've been meaning to put some code snippets in here. Nothing earth shattering just little handy coding bits.
A while back I spent some time in xaml trying to maintain image aspect ratio. The images that I'm binding to vary in size and ratio. I knew the area they would be displayed would have a height around 200-220 pixels. This is what I ended up doing.
Only bind to the dimension you don't know, width
Create a multibinding value converter. You do that by implimenting IMultiValueConverter.
Because these converters take object parameters, and I don't know who may use them after I am off a project; I always check the types of each param.
The math for getting ratio is just width / height.
If you know what height you want, then take the height and multiply it by the ratio
If you know the width take it and divide it by the ratio.