вот мысль: Положите все в сетку.Пусть сетка автоматически изменит свой размер, поместит холст в сетку (убедитесь, что он занимает всю сетку), чтобы он соответствовал размеру родителя:
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Canvas Background="Transparent" Grid.RowSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<Border Width="450" BorderThickness="1">
<Expander etc />
</Border>
<OtherControls Grid.Row="1"/>
</Grid>
, не уверен, насколько это может быть актуально, но проверьтеиз этого поста.Может быть, это даст вам некоторые идеи (я написал это 4 года назад, слишком долго, чтобы помнить детали, но код компилируется и запускается):
http://denismorozov.blogspot.com/2008/01/how-to-resize-wpf-controls-at-runtime.html