My own solution is primitive but does work to some extent.
To define control geometry, use grids with fractional width/heights, and other controls sizing to fit their content.
Calculate font scaling from the window's actual height divided by it's design height.
Set font size at the window level to designed size * scaling.
Problems:
- have to hard code the original design height as there doesn't seem to be any way to get this from the XAML
- have to hard code the original designed font size, ditto.
- doesn't scale padding or margins, so proportions still tend to get a bit wonky.
- if you want different font sizes, have to write code for all of the different controls.
WPF really makes this difficult IMO: it has scalable, resolution independent elements, but not much to actually help you build scalable user interfaces.