我在视图中有以下标记。当我在视图的启动代码中获得WindowContainer.Width
时,它会返回NaN
。
<Border BorderThickness="10">
<StackPanel x:Name="Panel" Orientation="Vertical" >
<Grid x:Name="WindowContainer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Loaded="WindowContainer_OnLoaded">
<delphi:Win32WindowHost x:Name="Host" />
</Grid>
<TextBlock x:Name="InfoTextBlock" HorizontalAlignment="Right" />
</StackPanel>
</Border>
Stretch
是否使网格拉伸以容纳其所有内容,或填充其容器?我希望它能够伸展以填充容器Border
,并且具有适当的double
宽度,我可以使用它将浮动窗口的大小设置为相同的大小。
答案 0 :(得分:20)
Does Stretch make the grid stretch to accomodate all its content, or to fill its container?
MSDN
关于HorizontalAlignment="Stretch"
:
子元素被拉伸以填充父元素的已分配布局空间。显式
Width
和Height
值优先。
Why is my Grid's width NaN?
NaN
表示“未设置”。 FrameworkElement
是WPF中许多控件的基类,如果没有显式设置Height和Width属性,那么类构造函数中的默认值为NaN
。
When I get WindowContainer.Width during start-up code for the view, it returns NaN
在这种情况下,请尝试获取ActualWidth
,而不是Width
,因为:
ActualWidth
属性是基于其他宽度输入和布局系统的计算值。该值由布局系统本身根据实际渲染过程设置,因此可能略微落后于作为输入更改基础的宽度等属性的设置值。