Я ожидал, что вы можете двусторонне связать ширину с высотой, используя конвертер значений, чтобы сохранить соотношение сторон. Передача соотношения сторон в качестве параметра конвертера сделает его более универсальным.
Итак, я попробовал это - сначала привязка без конвертера:
<Window
...
Title="Window1" Name="Win" Height="500"
Width="{Binding RelativeSource={RelativeSource self},
Path=Height, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<StackPanel>
<TextBlock>Width:</TextBlock>
<TextBlock Text="{Binding ElementName=Win, Path=Width}" />
<TextBlock>Height:</TextBlock>
<TextBlock Text="{Binding ElementName=Win, Path=Height}" />
</StackPanel>
</Window>
Странно, привязка ведет себя так, как если бы она была односторонней, и указанная ширина окна (как показано в TextBlock) не соответствует его размеру на экране!
Эту идею, возможно, стоит реализовать, но сначала нужно разобраться в этом странном поведении.
Надеюсь, это поможет!