Когда отображается окно, оно измеряется, затем WindowStartupLocation
обрабатывается с использованием ActualWidth
и ActualHeight
окна, вычисленного процессом измерения.
Поведение, которое вы описываете, говорит мне, что ActualWidth
и ActualHeight
измеряются либо равными нулю, либо относительно малыми во время вызова Show () или ShowDialog () и только позже устанавливаются в ненулевые значения.
Это может произойти, если, например, содержимое окна построено с использованием DataContext, который установлен только для события Loaded
. Когда вызывается Show()
, окно еще не было Loaded
, поэтому в нем нет данных. Позже, когда происходит событие Loaded
, он устанавливает DataContext, и окно обновляет его содержимое, но позиционирование уже произошло.
Существует много других сценариев, например, содержимое, заполненное с помощью вызова Dispatcher.BeginInvoke, или из отдельного потока, или привязки, которые задерживаются или асинхронны.
Обычно вам нужно искать все, что может привести к тому, что содержимое вашего окна будет меньше обычного в момент вызова Show()
, и исправить это.