Я определенно использовал бы:
try
{
//some code
}
catch
{
//you should totally do something here, but feel free to rethrow
//if you need to send the exception up the stack.
throw;
}
, Который сохранит Ваш стек.
ActualHeight
и ActualWidth
не устанавливаются, пока не будет измерен и упорядочен элемент управления. Обычно в InitializeComponent ()
нет ничего, что вызывает измерение, поэтому, когда он возвращает, они все равно будут нулем.
Вы можете принудительно вычислить их раньше, просто вызвав окно Measure ( )
и Arrange ()
вручную после возврата из окна InitializeComponent ()
.
Если вы изменяете размер содержимого:
window.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
Если вы используете явное окно size:
window.Measure(new Size(Width, Height));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
Луч прав (+1), это связано с тем, что проход измерения и аранжировки еще не выполнен. Однако вместо того, чтобы форсировать еще один проход макета (дорого), вы можете просто подождать, пока ваш элемент управления загрузится, прежде чем обращаться к свойствам ActualXxx
:
public MyWindow()
{
Loaded += delegate
{
// access ActualWidth and ActualHeight here
};
}