ビューに次のマークアップがあります。 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
幅にして、フローティングウィンドウのサイズを同じにすることができます。
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
プロパティは、他の幅の入力とレイアウトシステムに基づいて計算された計算された値です。この値は、実際のレンダリングパスに基づいてレイアウトシステム自体によって設定されるため、入力の変更の基礎となるWidthなどのプロパティの設定値よりわずかに遅れることがあります。