我在这样定义的Grid
中有一个Canvas
:
<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>
我的问题是,在Window构造函数上,在
InitializeComponents()
之后是Grid.ColumnDefinitions[0].ActualWidth
或“任何矩形”。 ActualWidth
都设置为0.0(高度相同)。我没有弄清楚该怎么做才能获取此信息。有什么帮助吗?观察结果:
Canvas/Grid
占据了整个窗口空间,因此其内部的每个矩形都有ActualWidth
和ActualHeight
最佳答案
直到测量并布置控件后,才能设置ActualHeight
和ActualWidth
。通常,InitializeComponent()
中没有任何可导致测量的内容,因此当它返回时,它们仍为零。
您可以通过在窗口的Measure()
返回之后手动调用窗口的Arrange()
和InitializeComponent()
方法来强制更早地计算它们。
如果要调整内容大小:
window.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
如果使用显式窗口大小:
window.Measure(new Size(Width, Height));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));