Почему моя ширина сетки 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, которую я могу использовать, чтобы размер плавающего окна был того же размера.

Ответ 1

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 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 Свойство - это рассчитанное значение, основанное на других входах ширины и системе компоновки. Значение устанавливается самой компоновкой, основанной на фактическом проходе рендеринга, и поэтому может немного отставать от установленного значения свойств, таких как ширина, которые являются основой изменения ввода.