Это лучшее решение, которое я могу придумать. Это работает, но, вероятно, не очень хорошо, поскольку виртуальная машина теперь кое-что знает о View (поправьте меня, если я ошибаюсь). так вот моя ВМ:
public void WndSizeChanged(object sender, EventArgs e)
{
this.setHeightWidth();
}
private void setHeightWidth()
{
this.WindowHeight = (Application.Current.RootVisual as FrameworkElement).ActualHeight - 125;
this.WindowWidth = (Application.Current.RootVisual as FrameworkElement).ActualWidth - 108;
}
public double WindowHeight{get;set;}
public double WindowWidth{get;set;}
и на мой взгляд:
<Grid x:Name="LayoutRoot"
Background="White"
DataContext="{Binding Source={StaticResource ViewModel}}"
Height="{Binding Path=WindowHeight, Mode=TwoWay}"
Width="{Binding Path=WindowWidth, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LayoutUpdated">
<ei:CallMethodAction MethodName="WndSizeChanged"
TargetObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300*" />
<ColumnDefinition Width="189*" />
<ColumnDefinition Width="720*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="101*" />
<RowDefinition Height="372*" />
</Grid.RowDefinitions>
В основном изменилось событие, которое вызывается для LayoutUpdated. Работает как шарм. Я на временной шкале, так что это придется делать. Я надеюсь, что это поможет любому, кто находится в такой же ситуации, как я. Не забудьте вызвать setHeightWidth () в конструкторе, чтобы также изначально установить h и w.