Why are ActualWidth and ActualHeight 0.0 in this case?
actualheight, actualwidth, grid, wpf, xaml
Solution
`ActualHeight` and `ActualWidth` are not set until the control is measured and arranged. Usually there is nothing in `InitializeComponent()` that causes a measure, so when it returns these will still be zero.
You can force these to be computed earlier by simply calling the window's `Measure()` and `Arrange()` methods manually after the window's `InitializeComponent()` returns.
If you are sizing to content:
window.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
If you are using an explicit window size:
window.Measure(new Size(Width, Height));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
Problem
I have a `Grid` inside a `Canvas` defined like this: ``` <Canvas x:Name="outerCanvas"> <Grid Grid.Row="1" Name="cGrid" ShowGridLines="True" Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}" Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Rectangle Name="rectangle1" Stroke="Black" Fill="AntiqueWhite" /> <Rectangle Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="1" Grid.RowSpan="1" Name="rectangle2" Stroke="Black" Fill="AliceBlue" /> <Rectangle Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="1" Grid.RowSpan="1" Name="rectangle3" Stroke="Black" Fill="Aqua" /> <Rectangle Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Grid.RowSpan="1" Name="rectangle4" Stroke="Black" Fill="DarkViolet" /> </Grid> </Canvas> ``` My problem is that, on the Window constructor, after `InitializeComponents()` either `Grid.ColumnDefinitions[0].ActualWidth` or "any rectangle".`ActualWidth` are all set to 0.0 (the same for heights). I'm not figuring out what to do to get this information. Any help? Observations: - I'm not defining the outer canvas width and height but if I do, it doesn't solve my problem. - At runtime I can see that this `Canvas/Grid` occupies the entire window space, so every rectangle inside it has `ActualWidth`s and `ActualHeight`s - The grid's width/height is bound to the canvas but I tried removing this binding and my problem still persists.