Q.「ViewBoxがあるじゃん!」
A. あいつはGridの指定を無視して配置してきやがるので駄目です
LayoutTransform最強!
以下のように対象のGridやCanvasにLayoutTransformを指定して、リサイズイベントで比率を計算してやると幸せになります
<Grid>
<Grid.LayoutTransform>
<ScaleTransform x:Name="Scale"/>
</Grid.LayoutTransform>
</Grid>
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
// defaultWidthとdefaultHeightは各自で
Scale.ScaleX = ActualWidth / defaultWidth;
Scale.ScaleY = ActualHeight / defaultHeight;
}