Для прозрачности я не рекомендую устанавливать размеры макета на уровне управления, как рекомендует Ян. Это усложнит адаптацию в долгосрочной перспективе.
Итак, вот мое решение, связывающее ширину ColumnDefinition
с ActualHeight
Сетки. Кроме того, я не рекомендую использовать имена для привязки, если вы можете избежать этого. Элемент управления с именем будет загружен все время, даже если он не виден или находится вне области видимости!
<Border BorderBrush="Black" BorderThickness="1">
<Grid ShowGridLines="True" x:Name="layoutGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType=Grid}, Mode=OneWay}"/>
<ColumnDefinition Width="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType=Grid}, Mode=OneWay}"/>
</Grid.ColumnDefinitions>
<Rectangle Fill="Red" Grid.Row="0" Grid.Column="0"></Rectangle>
<Rectangle Fill="Green" Grid.Row="0" Grid.Column="1"></Rectangle>
<Rectangle Fill="Blue" Grid.Row="0" Grid.Column="2"></Rectangle>
</Grid>
</Border>