web-dev-qa-db-ja.com

グリッドの幅がなぜNaNなのですか?

ビューに次のマークアップがあります。 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幅にして、フローティングウィンドウのサイズを同じにすることができます。

17
ProfK

Does Stretch make the grid stretch to accomodate all its content, or to fill its container?

から MSDN についてHorizontalAlignment="Stretch"

子要素は、親要素に割り当てられたレイアウトスペースを満たすように引き伸ばされます。明示的なWidthHeightの値が優先されます。


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などのプロパティの設定値よりわずかに遅れることがあります。

23